【问题标题】:nodejs modules.exports with ES6 classes带有 ES6 类的 nodejs modules.exports
【发布时间】:2017-04-13 23:15:47
【问题描述】:

我刚刚从 ES5 Functions 学习 ES6。

有些事情真的让我很困惑:

我们有出口,例如,

function B(){
// Some definition
}

exports.modules = B();

如果我们使用基于类的语法,这是否意味着我们根本不需要导出? (如果没有,我们怎么写?)你什么时候真正需要使用导出? (与使用'new'关键字调用构造函数相反?)。有什么区别?

个人意见:

ES6 感觉就像我在用 javascript 编写 Java 代码:-\ 我喜欢函数式编程,但看起来 ES6 是要走的路(我的一部分讨厌新语法,但另一半想试一试……任何人来过这里吗?)

请赐教。

【问题讨论】:

  • "我们在 ES5 中有导出。"不,我们没有。
  • 你确定exports.modules 不应该是module.exports 吗?我假设您目前正在使用 CommonJS 模块系统。
  • 你...试过了吗?你仍然需要告诉模块要导出什么。
  • 我不明白为什么我因为提出问题(或表达我的意见)而被评为-4。我认为 SO 是一个我可以提出问题或表达我的想法的地方!天哪!
  • 您可以提出问题并表达您的想法,只是不要期望每个人都喜欢您的想法或表达方式。我没有投反对票,但我也没有投赞成票,因为您的问题不清楚(“我们如何写它” - 写什么?),不正确(exports.modules 不是导出的工作方式),并且部分内容没有意义(最后的项目符号和 R 是什么?它看起来像一些未完成或格式错误。)

标签: javascript node.js ecmascript-6


【解决方案1】:

如果我们使用基于类的语法,这是否意味着我们根本不需要导出?

没有。这两个人完全没有关系。

  • class 语法是关于定义构造函数和原型方法的。
  • exports 是关于使值可用于其他文件(模块),特定于您正在使用的环境(node.js)而不是语言。

因此,即使您从function B 切换到class B,也不会改变模块系统的任何内容。如果您从 common.js 样式更改为 ES6 模块语法以导出您的 Bnew B() 或其他任何内容,这不会改变 B 的声明。

ES6 感觉就像我在用 javascript 编写 Java 代码 :-\ 我喜欢函数式编程,但看起来 ES6 是要走的路。

ES6 class 语法只是构造函数和原型的糖(使其更容易/更短地读写)。如果您从事函数式编程并且以前没有使用过构造函数,那么您也不会在 ES6 中使用它们。

【讨论】:

    【解决方案2】:

    ES6 模块导出不可变绑定 与 CommonJS 模块相比,ES6 模块导出绑定,实时连接到值。下面的代码演示了它是如何工作的:

    //------ lib.js ------
    export let mutableValue = 3;
    export function incMutableValue() {
        mutableValue++;
    }
    
    //------ main1.js ------
    import { mutableValue, incMutableValue } from './lib';
    
    // The imported value is live
    console.log(mutableValue); // 3
    incMutableValue();
    console.log(mutableValue); // 4
    
    // The imported value can’t be changed
    mutableValue++; // TypeError
    

    如果您通过星号 (*) 导入模块对象,您会得到类似的结果:

    //------ main2.js ------
    import * as lib from './lib';
    
    // The imported value is live
    console.log(lib.mutableValue); // 3
    lib.incMutableValue();
    console.log(lib.mutableValue); // 4
    
    // The imported value can’t be changed
    lib.mutableValue++; // TypeError
    

    看看:http://es6-features.org/#ValueExportImporthttp://www.2ality.com/2015/07/es6-module-exports.html

    【讨论】:

      猜你喜欢
      • 2017-07-29
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多