基本/高效JavaScript中的原型继承?

时间:2014-04-04 15:19:23

标签: javascript prototypal-inheritance

所以我目前有以下代码片段。我正在尝试创建一个Cylon类,其中包含一个模型属性和一个原型attack()方法。我正在创建一个HumanSkin类,它继承自Cylon,并且还添加了自己的原型infiltrate()方法。

function Cylon(model){
  this.model = model;
}

Cylon.prototype.attack = function(){
    return("Destroy all humans!");
}

function HumanSkin(){}
HumanSkin.prototype = new Cylon();
HumanSkin.prototype.infiltrate = function(){
  return("Infiltrate the colonies");
}

cylon = new Cylon("raider");
caprica = new HumanSkin(6);

我的问题是这个问题 - 为什么console.log(caprica.model);会返回Undefined?如何在JS中轻松获得完全继承(最好使用封装)?

1 个答案:

答案 0 :(得分:5)

当你说,

HumanSkin.prototype = new Cylon();

您正在创建Cylon的新对象,其中包含空模型(undefined)。因此,继承自Cylon,可以像这样进行改进

HumanSkin.prototype = Object.create(Cylon.prototype);

请注意,当您继承原型继承时,父级的prototype中的任何内容都可供子级使用。但是model位于Cylon的构造函数中。通常,这可以像这样解决

function HumanSkin(model) {
    Cylon.call(this, model);
}

现在,无论何时构造新的HumanSkin对象,都将使用当前对象(Cylon)调用内部this函数,并将model作为对此的争论。因此,Cylon将初始化当前对象中的model