创建新类与使用export const之间的差异

Guy*_*Guy 13 commonjs ecmascript-6 reactjs babeljs

建立:

  • BabelJS(es2015,反应,阶段-1)
  • 的WebPack
  • React/redux

CommonJS和ES6的新功能.我知道对象实例和方法的静态容器之间的区别,但我不确定它们在分离到模块时的行为方式.所以我想知道返回一个实例之间的区别是什么(这个模式是否有效?):

// StateParser.js

class StateParser {
    constructor() {
     }

     method1() {
        ...
     }

}

export default new StateParser()
Run Code Online (Sandbox Code Playgroud)

并导出const方法:

// StateParser.js

let state = {
}

export const method1 = () => { ... }
Run Code Online (Sandbox Code Playgroud)
  1. 方法A:每次导入时都会有新的实例吗?
  2. 方法B:使用对象解构的能力之一是:

    import { method1 } from '../utils/StateParser.js';
    
    Run Code Online (Sandbox Code Playgroud)

    然后使用method1,就好像它存在于本地?

  3. 方法A:在构造函数中初始化状态的能力有哪些好处?

所以基本上我不确定何时使用哪个实用程序类,并希望您的输入.

Ber*_*rgi 20

每次导入A时都会有新的实例吗?

不,模块只评估一次.

B的好处之一是使用对象解构然后使用method1就好像它存在于本地一样?

是的,虽然它不被称为"解构".它们被命名为import(或模块的命名导出),并且它们不嵌套并使用不同的语法进行别名.

A的一个好处是能否在构造函数中初始化状态?

不可以.您也可以直接在模块范围内初始化模块状态,您不需要构造函数.

但是,是的,如果你在实例中有状态,那么使用一个可以多次实例化的类是个好主意.为此,您需要导出类本身,当然不是实例.

export default new …模式是否有效?

不,由于上述原因,它是反模式.鉴于该类在其他任何地方都没有使用,它与匿名类反模式非常相似.无论如何,导出多个命名导出要比默认导出对象好得多.


thi*_*ign 5

new StateParser()出于多种原因,我们不建议导出评估(例如)。

在这种情况下,模块导出仅评估一次的结果(@Bergi 也提到过)。这很少是期望的结果,但如果是的话,应该使用单例模式。一些 ES6 模块的优点消失了(树摇动更快地访问导入),它使导入速度变慢,并可能导致副作用,而这些副作用本应在调用时发生。我还认为这是一种反模式,可以通过导出函数或类来避免缺点。

export default StateParser与导出 const 方法相比会更有意义。

也可以看看:


归档时间:

查看次数:

10328 次

最近记录:

9 年,5 月 前