请查看以下方法来模拟JavaScript中的继承。它非常简单,根本不使用原型。它似乎运作良好,但我怀疑它有问题,只是因为人们通常不这样做。任何人都可以解释一下,这种方法的缺点是什么,我缺少什么?非常感谢。
// The base class constructor
function Animal(name)
{
var _name = name; // local variable, not visible to subclass
this.greeting = function()
{
return "Hello, "+_name;
}
this.makeSound = function()
{
return "Don't know what to say";
}
}
// The subclass constructor
function Cow(name)
{
Animal.call(this, name); // call the base constructor
this.makeSound = function() // override base class's method
{
return "Mooooo!";
}
}
var myCow = new Cow("Burenka");
console.log(myCow.greeting()); // call inherited method
console.log(myCow.makeSound()); // call overriden method
更新 感谢大家的回答和评论。总结一下:
可以使用此方法,但存在一些限制:
instanceof
将无法正常工作(即不会将子类实例视为基类实例)。当然,对于同一主题,还有其他问题。另见:
答案 0 :(得分:1)
除了在in this answer描述的原型上定义方法的好处之外,使用您的方法,Cow
的实例不是Animal
的实例,因此您无法做到使用instanceof
。使用原型myCow instanceof Animal
进行继承会得到true
。