nodejs modules.exports与ES6类

时间:2016-11-29 19:57:18

标签: javascript node.js ecmascript-6

我刚从ES5功能中学习ES6。

某些事情让我很困惑:

我们有出口例如,

function B(){
// Some definition
}

exports.modules = B();

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

个人意见:

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

请赐教。

2 个答案:

答案 0 :(得分:4)

  

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

没有。这两者完全没有任何关系。

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

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

  

ES6感觉就像我在javascript中编写Java代码一样: - \我喜欢函数式编程,但看起来ES6是可行的方法。

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

答案 1 :(得分:-1)

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/#ValueExportImport和  http://www.2ality.com/2015/07/es6-module-exports.html