【发布时间】:2013-10-10 08:59:00
【问题描述】:
我是 Javascript 的新手,我刚刚完成了 codeAcademy 的长篇 Javascript 课程。我对prototype 有一些疑问。
我知道prototype 主要用于继承以及动态定义对象的方法。
但我还有一些问题。看我的代码。我使用原型在对象Animal 和另一个toString 中定义了一个toString。当我运行它时,为什么它显示:[Object] Dumbo 4 而不是[Proto] Dumbo 4?
function Animal(name, numLegs){
this.name = name;
this.numLegs = numLegs;
this.toString = function(){
return "[Object]" + this.name + " " + this.numLegs + "\n";
};
}
Animal.prototype.toString = function(){
return "[Proto]" + this.name + " " + this.numLegs + "\n";
};
var animal = new Animal("Dumbo", 4);
console.log(animal.toString());
【问题讨论】:
-
每次创建对象时都会在运行时覆盖
toString。将console.log与Animal.prototype.toString之前的一些消息和this.toString之前的另一个消息放在一起 -
正如 zerkms 所说,但并没有真正覆盖,更多阴影。属性解析从对象本身开始,然后查看
[[Prototype]]链上的属性。所以实例上的那个(在构造函数中分配,所以每个实例都有自己的副本)在继承的那个(每个实例共享)之前找到。 -
答案已经给出,但您可能需要更多信息来了解发生了什么。用示例代码解释原型:stackoverflow.com/a/16063711/1641941 JavaScript 中的
this是什么:stackoverflow.com/a/19068438/1641941
标签: javascript inheritance prototype