[英]Javascript Simple Prototypal Inheritance
我在控制台里玩,試圖了解原型繼承。 我熟悉經典繼承,但我從未在JS工作中使用過任何繼承。
如果我有:
var foo = {
cat: "oliver"
}
var bar = Object.create(foo);
foo.prototype = {
dog: "rover"
}
當我做:
dir(bar.dog)
要么
dir(foo.dog)
我希望看到rover
但他們都回歸undefined
。
我錯過了什么?
提前致謝。
你看到這個是因為這一行:
foo.prototype = {
dog: "rover"
}
創建該對象后,無法更改對象的原型。
您可以做的是修改現有原型,如下所示:
foo.dog = "rover";
請記住, foo
是bar
的原型。
原型成員僅在您實例化時才可用。 foo.cat
是可用的,因為它類似於“靜態”屬性(來自具有這種代碼支持的語言,例如PHP)。 此外,在執行Object.create
時,您應該繼承foo
原型
var foo = function(){ };
foo.cat = "oliver";
var bar = Object.create(foo.prototype);
foo.prototype.dog = "rover";
console.log(bar.dog); // yields "rover", modifying the prototype of "foo" alter the members of "bar" instance
這將是完成您正在嘗試的正確代碼:
var foo = Object.create({dog:'rover'});
foo.cat = 'oliver';
var bar = Object.create(foo);
這種方式foo
繼承自一個名為dog
的屬性的對象,然后bar
繼承自同一個對象,因為它繼承自foo
現在,請與bar.dog
和bar.cat
它打印rover
和oliver
分別
請注意.prototype
只能用於訪問或設置函數的原型對象,你在該代碼中所做的是錯誤的,這是正確的:
var a = function(){
}
a.prototype = {};
要訪問對象的原型,你可以這樣做:
a = {};
a.\__proto__.foo = 'bar';
但是,這允許您獲取或設置該原型對象的屬性,但不能將其替換為另一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.