JavaScript原型问题

时间:2010-12-29 22:00:02

标签: javascript

目前,我正在阅读“面向对象的JavaScript”。 另外,我从书中拿出一个例子时遇到了打嗝。

以下是代码示例:

var Dog = function() {
    this.tail = true;
};

var benji = new Dog();
var rusty = new Dog();

Dog.prototype.say = function() { return "Woof!"; };

benji.say();
rusty.say();

Dog.prototype = {
    paws: 4,
    hair: true
};
Dog.prototype.constructor = Dog;

var lucy = new Dog();
lucy.say();

基本上,我们的想法是做以下工作:

  1. 的console.log(lucy.say());
  2. 的console.log(benji.paws);
  3. 显而易见的 - lucy.say();
  4. 奇怪的是,我已经将示例复制到'T',但无济于事。 如果有人能说清楚,我会感激不尽。

    干杯

1 个答案:

答案 0 :(得分:6)

通过

Dog.prototype = {
    paws: 4,
    hair: true
};

您创建了一个完全原型对象(您将新对象分配给prototype)。方法say()将无法用于新的Dog对象,也不会将属性pawshair提供给旧版本。

你想:

Dog.prototype.paws = 4;
Dog.prototype.hair = true;

您可以尝试:

console.log(benji.__proto__ === rusty.__proto__); // prints true
console.log(lucy.__proto__ === rusty.__proto__); // prints false

console.dir(x.__proto__)应该会显示原型对象的属性(至少在Chrome中)。