我正在研究JavaScript的原型行为,并看到许多不同的用法让我感到困惑。假设我们有以下构造函数和原型定义。
function Mammal(name) {
this.name = name;
}
Mammal.prototype.says = function ( ) {
return this.saying || '';
};
Mammal.prototype.getName = function ( ) {
return this.name;
};
function Cat(name) {
this.name = name; //another maybe better way could be Mammal.call(this, name); results in the same
this.saying = "meow";
}
Cat.prototype = new Mammal();
Cat.prototype.purr = function() {
return "rrrrrrr";
};
我在网络和书籍中看到了很多这样的例子,但感觉这不是正确的做法。我遇到的第一个问题是,在没有它的参数的情况下调用Mammal构造函数(此时它们显然是未知的)。因此,新构造的Mammal对象的name属性未定义(参见下图)。
在我看来,这个属性甚至不应该存在,因为没有用,污染了对象模型。
我的问题:上面的例子是用来解释一些JavaScript的原型行为是否是可接受的做法,或者更好的做法如下:
Cat.prototype = Object.create(Mammal.prototype);
请释放我这个负担。提前谢谢。