0

我正在研究 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 属性未定义(见下图)。

示例 1

在我看来,这个属性甚至不应该存在,因为它没有用处并且污染了对象模型。

我的问题:上面的示例被大量用于解释 JavaScript 的一些原型行为是可接受的执行方式,还是最好执行以下操作:

Cat.prototype = Object.create(Mammal.prototype);

请把我从这个负担中解放出来。提前致谢。

4

0 回答 0