假设你有
class Foo {
constructor(){
return this;
}
}
Foo.modes = {
ModeA : 0,
ModeB : 1
}
是否会为每个Foo实例创建Foo.modes?怎么能证明这是真的?
答案 0 :(得分:3)
这不是在构造函数中创建的实例属性,它是一个静态(类)属性,所以没有。它只会被创建一次 - 当声明对象文字时 - 并分配给类构造函数。该类的任何实例都可以访问,但不会复制。
要为每个类实例创建一个对象,您可以制作副本或新对象,并将其分配给this
上的属性:
class Foo {
constructor(){
this.modes = {
ModeA : 0,
ModeB : 1
}
}
}
要为类创建一个对象,您应该像编辑现在一样分配给构造函数。如果您看一下Babel的静态方法输出,您可以看到它是如何工作的。 ES6代码:
class Foo {
static bar() { }
baz() { }
}
将产生ES5:
var Foo = function () {
function Foo() {
_classCallCheck(this, Foo);
}
Foo.bar = function bar() {};
Foo.prototype.baz = function baz() {};
return Foo;
}();
分配给构造函数原型的属性将是""的一部分。实例,而直接分配给构造函数的属性将是该类的一部分。