目前,我正在阅读“面向对象的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();
基本上,我们的想法是做以下工作:
等
奇怪的是,我已经将示例复制到'T',但无济于事。 如果有人能说清楚,我会感激不尽。
干杯
答案 0 :(得分:6)
通过
Dog.prototype = {
paws: 4,
hair: true
};
您创建了一个完全新原型对象(您将新对象分配给prototype
)。方法say()
将无法用于新的Dog
对象,也不会将属性paws
和hair
提供给旧版本。
你想:
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中)。