ES6模块:出口单一类的静态方法或多个独立的方法ES6模块:出口单一类的静态方法或多个独立的方法(E

2019-05-10 12:10发布

我使用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)出口:A类的只是静态方法感觉有点“代码味道”,但同样都出口单独确实感觉有点冗长。 难道仅仅是开发商的偏好,还是有性能问题吗?

2)进口:“*为”语法是我的首选方法,因为它可以让你用点号(引用这两个模块并帮助代码的可读性的方法)。 这是否有,虽然我可以只使用方法1的性能影响?

Answer 1:

一类只是静态方法感觉有点“代码味道”的

确实是的。 你并不需要一个class结构在这里! 只要出口正常的“模块”的对象:

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

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

我不建议你使用多个出口第二种方式,虽然。

出口一切个别确实感觉有点冗长

好了,你不需要任何的包装结构,所以我会说这是样板少。 你只需要明确标记要出口,这是不是一件坏事一切。

* as语法是我的首选方法,因为它可以让你用点号(引用这两个模块和方法)协助代码的可读性。

这是非常个人喜好,以及不依赖于代码你正在写的类型。 有时简洁优越,但明确引用模块可以帮助以及能力。 注意:使用该命名空间的进口* as和默认导入的对象非常类似在这里,虽然只有一个名为出口允许您通过直接引用他们import {myMethod1, myMethod2} 所以最好把选择那些导入模块。

这是否有任何性能影响?

不多。 当前ES6实现尚未针对性能的优化反正。

在一般情况下,静态标识更容易解决和优化比属性访问[1],多个命名的出口和进口部分理论上可以使JIT更快,当然也更小的文件需要更少的时间,如果捆绑过程中删除未使用的出口到装载。 见这里了解详情。 有几乎将出现明显的性能差异,你应该使用什么是更好的维护。

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



文章来源: ES6 modules: Export single class of static methods OR multiple individual methods