0
假设你有是否为每个实例重新创建对象属性?
class Foo {
constructor(){
return this;
}
}
Foo.modes = {
ModeA : 0,
ModeB : 1
}
威尔Foo.modes被Foo的每个实例创建?这怎么能证明是真的?
假设你有是否为每个实例重新创建对象属性?
class Foo {
constructor(){
return this;
}
}
Foo.modes = {
ModeA : 0,
ModeB : 1
}
威尔Foo.modes被Foo的每个实例创建?这怎么能证明是真的?
这不是在构造函数创建一个实例属性,它是一个静态(类)属性,所以没有。它只会被创建一次 - 当对象文字被声明时 - 并被分配给类的构造函数。任何类的实例都可以访问,但不会创建副本。
要为类的每个实例创建一个对象,你可以进行复印或一个新的对象,并将其分配给一个属性上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;
}();
属性,而直接分配给构造属性将成为团队的一分子类。
谢谢,这真是太棒了。对于使用'es2015'的静态函数,这也是如此吗? (只创建一次) – BarryBones41
@ BarryBones41我添加了一些关于它如何工作的更多信息,其中包括es5输出以准确显示它的功能。 – ssube