【发布时间】:2016-02-23 07:30:26
【问题描述】:
由于它目前是通过 Babel + Webpack 编译的,模块的导出类将创建一个闭包:在模块内创建的变量将在类实例之间共享。
bar.js:
let foo;
export default class Bar {
set foo(value) {
foo = value;
}
get foo() {
return foo;
}
}
app.js:
import Bar from './bar.js';
var barOne = new Bar();
var barTwo = new Bar();
barOne.foo = 'quux';
console.assert(barTwo.foo === 'quux');
我想知道这种行为是否符合规范。
【问题讨论】:
-
如果你改为使用
this.foo == value会发生什么? :) -
在二传手中。我想说
foo是一个类(又名静态)属性,而this.foo是一个实例属性。 -
等等。我什至没有在那里看到
let foo;。当然,这两个班级都是一样的。这个例子实际上与类无关,但与模块(export和import)应该工作的方式有关 -
@Sergiu:它也与模块无关。
-
foo 是模块内的变量。整个模块在任何地方共享。是的,整个模块并没有在这里添加任何“魔法”。如果您在其他地方使用
export foo和import,它也会是=== 'quux'。
标签: javascript class module closures ecmascript-6