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