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属性访问