原型的不同方式,但首选哪一种?

时间:2013-01-16 10:55:26

标签: javascript

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

Example 1

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

我的问题:上面的例子是用来解释一些JavaScript的原型行为是否是可接受的做法,或者更好的做法如下:

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

请释放我这个负担。提前谢谢。

0 个答案:

没有答案