2014-09-12 139 views
2

爲什麼不會的JavaScript原型的Javascript不繼承原型屬性

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

boy = function Boy(){}; 

boy.prototype = new Man(); 

myboy = new boy('hari',14,'blue'); 

console.log(myboy); 
// => myboy {name:undefined, age:undefined, color:undefined} 

它不繼承的屬性繼承屬性。

它的意思有屬性

// => myboy {name:'hari', age:14, color:'blue'} 
+1

* 「這不繼承財產。」 *嗯,是這樣做,顯然有'name','age'和'color'。他們沒有任何價值,因爲你在沒有任何爭論的情況下調用「Man」,並且「Boy」對你提供的論點沒有做任何事情。 – 2014-09-12 16:05:07

+0

它繼承了原型。不是構造函數。 – slebetman 2014-09-12 16:06:11

+0

是的你的權利。我會編輯我的問題。爲什麼它不繼承屬性的值。 – 2014-09-12 16:06:28

回答

4

它沒有繼承性。

是這樣做,顯然有nameagecolor。他們只是沒有任何價值,因爲您在沒有任何參數的情況下調用Man,並且Boy對您提供的參數沒有任何作用。

你的繼承設置是不正確的。你應該使用Object.create父原型添加到孩子的原型鏈:

Boy.prototype = Object.create(
    Man.prototype, 
    {constructor: {value: Boy, writable: true}} 
); 

而且,像在其他語言中,你必須調用子構造函數中的父類的構造(應用到新的子實例),以及所有需要的argumants經過:

function Boy(name, age, color) { 
    Man.call(this, name, age, color); 
} 
// or 
function Boy() { 
    Man.apply(this, arguments); 
} 

更多信息:

+0

謝謝你的答案和額外的信息。我很感激。 – 2014-09-12 16:24:46