我正在研究 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);
请把我从这个负担中解放出来。提前致谢。