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

我正在使用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'语法是我的首选方法,因为它允许您使用点符号(引用模块和方法)来辅助代码的可读性。 这是否有性能影响,虽然当我可能只使用1的方法?

一类刚才的静态方法感觉就像是一种“代码味道”

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

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

不过,我build议您使用多个输出的第二种方法。

单独导出所有东西确实感觉有点冗长

那么,你不需要任何包装结构,所以我会说这是less了样板。 你只需要明确地标记你想要导出的所有东西,这不是一件坏事。

* as语法是我的首选方法,因为它允许您使用点符号(引用模块和方法)帮助代码的可读性。

这是非常个人的喜好,并取决于您正在编写的代码的types。 有时候,简洁是优越的,但明确引用模块的能力也是有帮助的。 请注意,使用* as和默认导出对象的命名导出在这里非常相似,尽pipe只有命名导出允许您通过import {myMethod1, myMethod2}直接引用它们。

这是否有任何性能影响?

我不这么认为。 无论如何,目前的ES6实现还没有瞄准性能优化。

一般来说,静态标识符比属性访问更容易parsing和优化[1] ,多个命名导出和部分导入理论上可以使JIT更快,当然,更小的文件需要更less的时间来加载。 详情请看这里 。 几乎不会有明显的性能差异,你应该使用更好的维护。

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