ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – ES6模块:导出单类静态方法或多个单独方法

2019-09-15 13:43:21  阅读:124  来源: 互联网

标签:javascript ecmascript-6 class module


我正在使用ECMAScript6模块.从以下选项中导出/导入模块中的多个方法的正确方法是什么?

单类静态方法:

//------ myClass.js ------

export default class myClass {

  static myMethod1() {
    console.log('foo'); 
  }

  static myMethod2(args...) {
    console.log('bar'); 
  }  

}

//------ app.js ------

import myClass from 'myClass';
myClass.myMethod1();    //foo

多种导出方法:

//------ myMethods.js ------

export function myMethod1() {
    console.log('foo');
}

export function myMethod2() {
    console.log('bar');
}

//------ app.js ------
import {myMethod1, myMethod2} from 'myMethods';
myMethod1()    //foo;


//OR
import * as myMethods from 'myMethods';
myMethods.myMethod1()    //foo;

1)出口:
一类只是静态方法感觉有点“代码味道”,但同样单独导出所有内容确实感觉有点冗长.它只是开发人员偏好还是存在性能影响?

2)导入:
‘* as’语法是我首选的方法,因为它允许您使用点符号(引用模块和方法)帮助代码可读性.当我可能只使用其中一种方法时,这是否有性能影响?

解决方法:

A class of just static methods feels like a bit of a ‘code smell’

确实是的.你这里不需要一个类结构!只需导出一个普通的“模块”对象:

//------ myMethods.js ------

export default {
  myMethod1() {
    console.log('foo'); 
  },
  myMethod2(args...) {
    console.log('bar'); 
  }  
};

不过,我建议您使用多个导出的第二种方法.

exporting everything individually does feel a bit verbose

好吧,你不需要任何包装结构,所以我认为它的样板更少.您只需要明确标记要导出的所有内容,这不是一件坏事.

* as syntax is my preferred method as it allows you to use the dot notation (referencing both the module AND the method) aiding code readability.

这是个人偏好,并且取决于您正在编写的代码类型.有时简洁性更高,但明确引用模块的能力也很有用.请注意,使用* as和default-imported对象的命名空间导入在这里非常相似,但只有命名导出允许您通过import {myMethod1,myMethod2}直接引用它们.因此,最好将选择权交给那些导入模块的人.

Does this have any performance implications?

不多.无论如何,当前的ES6实现还没有针对性能优化.

通常,静态标识符比属性访问更容易解析和优化[1],理论上多个命名导出和部分导入可以使JIT更快,当然,如果在捆绑期间删除未使用的导出,则较小文件需要较少的加载时间.有关详情,请参见here.几乎没有明显的性能差异,你应该使用更好的可维护性.

[1]:模块命名空间(import * as ns)也是静态的,即使ns ….看起来像动态属性访问

标签:javascript,ecmascript-6,class,module
来源: https://codeday.me/bug/20190915/1805004.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有