我得到下面的代碼了意想不到的結果預期:的Javascript原型屬性不會像使用數組和對象領域
var TestModel, u, u2;
function TestModel() {}
TestModel.prototype.a = null;
TestModel.prototype.b = [];
u = new TestModel();
u.a = 1;
u.b.push(1);
u2 = new TestModel();
u2.a = 2;
u2.b.push(2);
console.log(u.a, u.b); // outputs: 1 [1,2]
console.log(u2.a, u2.b); // outputs: 2 [1,2]
我覺得很奇怪,u.b
和u2.b
包含相同的值,即使的TestModel
每個實例根據我如何設置原型應該有自己的實例變量。所以這是我所期待的輸出:
console.log(u.a, u.b); // expecting: 1 [1]
console.log(u2.a, u2.b); // expecting: 2 [2]
同樣的事情發生,如果我設置b
是一個對象,並對其設置鍵,而不是使用它作爲一個數組。我在這裏不瞭解什麼?
非常感謝!我並不知道這種微妙的差別。所以基本上我應該在我的構造函數中初始化所有'實例'變量,然後在其他地方操作它們。 – hiddentao
@hiddentao:的確如此。可以將原始類型作爲默認值分配給原型屬性,但如果對象和數組是「每個實例」,則應在構造函數中初始化它們。我通常仍然在原型上定義屬性,但是用'null'初始化它(就像你用'TestModel.prototype.a'所做的那樣)。 –
@Felix,你用什麼工具來獲得TestModel中值的漂亮圖表? –