所以我目前有以下代码片段。我正在尝试创建一个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中轻松获得完全继承(最好使用封装)?
答案 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
。