我刚从ES5功能中学习ES6。
某些事情让我很困惑:
我们有出口例如,
function B(){
// Some definition
}
exports.modules = B();
如果我们使用基于类的语法,这是否意味着我们根本不需要出口? (如果没有,我们怎么写呢?)你什么时候需要使用出口? (而不是通过使用' new'关键字来调用构造函数?)。有什么区别?
个人意见:
ES6感觉就像我在javascript中编写Java代码一样: - \我喜欢函数式编程,但看起来ES6是要走的路(我的一部分讨厌新语法,但另一半想要试一试)。有人来过这里吗?)请赐教。
答案 0 :(得分:4)
如果我们使用基于类的语法,这是否意味着我们根本不需要出口?
没有。这两者完全没有任何关系。
class
语法是关于定义构造函数和原型方法。exports
是关于使值可用于其他文件(模块),特定于您正在使用的环境(node.js),而不是语言。因此,即使您从function B
切换到class B
,也不会改变有关模块系统的任何信息。如果您从common.js样式更改为ES6模块语法以导出B
或new 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