使用javascript,您可以讓一個對象從另一個對象繼承屬性,以便如果在第一個對象上找不到屬性,則會搜索第二個對象。通過在構造函數上重新指定prototype
屬性,可以創建許多對象的鏈來搜索屬性。一個構造函數的屬性可能被另一個構造函數繼承嗎?
例如:
var X = function() {};
X.prototype.x = "x";
var Y = function() {};
Y.prototype = new X();
Y.prototype.y = "y";
var z = new Y();
z.z = "z";
///////////////
console.log(z.z); // searches z for property 'z', finds it and returns 'z'
console.log(z.y); // searches z, fails, searches z.[[hidden_prototype]]
// (which is Y.prototype), finds it and returns 'y'
console.log(z.x); // searches z, fails, searches Y.prototype, fails,
// searches Y.prototype.[[hidden_prototype]]
// (which is X.prototype), finds it and returns "x"
我想知道雖然它是否有可能延伸到性能上的構造函數,即X
和Y
在上面的代碼。例如,有沒有辦法來改變上面的代碼,這樣下也將工作:
X.val = 42;
console.log(Y.val); // returns 42
這工作,如果Y.[[hidden_prototype]] === X
,但我不知道如何設置,當X
和Y
還必須構造函數。
謝謝,這就是我想知道的,當我輸入問題時沒有看到相關的鏈接。通過它的外觀,可能的答案列表是由不僅標題的內容更新的,而且還包括文本的內容 - 在輸入問題後應再次檢查它:) –
您不應該使用非標準的,不推薦的__proto__屬性。它沒有得到廣泛的支持,將來會從支持它的瀏覽器中刪除。 – RobG