所以我目前有以下代码片段。我正在尝试创建一个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中获得完全继承(最好是通过封装)? 最佳答案
当你说,
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
。