讀取從谷歌顯影劑見解的摘錄:在原型與值型實例變量 https://developers.google.com/speed/articles/optimizing-javascript#initializing-instance-variables在JavaScript中,爲什麼要將具有引用類型的實例變量放入構造函數中?
地點實例變量聲明/初始化(而不是引用類型)初始化值(即,類型號值,布爾值,null,未定義或字符串)。這樣可以避免在每次調用構造函數時不必要地運行初始化代碼。 (這不能用於實例變量,它的初始值取決於參數給構造,或一些其它狀態在施工時間來完成。)
對於實施例,代替:
foo.Bar = function() {
this.prop1_ = 4;
this.prop2_ = true;
this.prop3_ = [];
this.prop4_ = 'blah';
};
用途:
foo.Bar = function() {
this.prop3_ = [];
};
foo.Bar.prototype.prop1_ = 4;
foo.Bar.prototype.prop2_ = true;
foo.Bar.prototype.prop4_ = 'blah';
我明白LOGI c將變量的值類型放入函數原型中,但是當我們有像this這樣的引用變量時,我們是不是運行初始化代碼。 (按照Google的例子)?這是不是每次調用構造函數都會創建一個新的數組?
「這不是每次調用構造函數都創建一個新數組嗎?」 - 它確實,這是重點。 – user2357112
沒有「引用類型」或「值類型」。有效的語言類型列在[* ECMA-262§6.1*](http://ecma-international.org/ecma-262/7.0/index.html#sec-ecmascript-language-types)中。變量具有一個值,該值可能是一個[*原始值*](http://ecma-international.org/ecma-262/7.0/index.html#sec-primitive-value)或*參考*(又名[*參考規格類型*](http://ecma-international.org/ecma-262/7.0/index.html#sec-reference-specification-type))。 – RobG