Javascript不继承原型属性

时间:2014-09-12 16:01:21

标签: javascript inheritance

为什么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 个答案:

答案 0 :(得分:4)

  

它不会继承属性。

是的,显然有nameagecolor。它们没有任何值,因为您在没有任何参数的情况下调用Man,而Boy对您提供的参数没有任何作用。

您的继承设置完全不正确。您应该使用Object.create

将父原型添加到子项的原型链中
Boy.prototype = Object.create(
  Man.prototype,
  {constructor: {value: Boy, writable: true}}
);

而且,和其他语言一样,你必须在子构造函数中调用父构造函数(应用于新的子实例),传递所有需要的参与者:

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

更多信息: