2015-05-14 77 views
0

我正在研究原型繼承以瞭解它,下面的代碼是我正在研究的。在最後一行中,有兩個控制檯,問題在於,兩個控制檯顯示,另一個不顯示。我的理解是錯誤的嗎?請幫助我改進。Javascript:Protoypal Inheritance

function Gadget(name, color) 
{ 
    this.name = name; 
    this.color = color; 
} 

function Gadgetnew(names, colors) 
{ 
    this.part = names; 
    this.Jack = colors; 
} 

Gadget.prototype = new Gadgetnew(); 

var newtoy = new Gadgetnew("webcam", "black"); 

console.log(newtoy.name); //Not working 
console.log(newtoy.part) //Working 
+3

從本質上講,你可以因爲你不使用它在所有刪除一切從這個代碼做'Gadget'。鑑於此,爲什麼你會期望'name'的工作? – deceze

+0

你應該看看這篇關於原型繼承的文章http://javascriptissexy.com/javascript-prototype-in​​-plain-detailed-language/ – jfmbrennan

+0

我想這行:'Gadget.prototype = new Gadgetnew();'想成爲例如:'Gadgetnew.prototype = new Gadget();' –

回答

0

這是因爲名稱被分配到nothing。這就是爲什麼它是undefined。第二Gadgetnew應該inheritGadget屬性。它應該像Gadgetnew.prototype = new Gadget();Gadget.prototype.constructor = Gadget;,因爲在這種情況下you're not using it at all.

function Gadget(name, color) 
{ 
    this.name = 'I am Gadget name'; 
    this.color = color; 
} 

function Gadgetnew(names, colors) 
{ 
    this.part = names; 
    this.Jack = colors; 
} 

Gadgetnew.prototype = new Gadget(); 

var newtoy = new Gadgetnew("webcam", "black"); 

console.log(newtoy.name); // I am Gadget name 
console.log(newtoy.part); // webcam