所有,我总是对对象的__proto__
和prototype
属性感到困惑,特别是在原型(prototype)继承链中,假设有一个名为test的对象
,代码如下。
test.add();//try to call a method name add.
在我的理解中,我画了一个图表来演示搜索的流程。但我不确定它是否正确。请帮助审查它。谢谢。
根据 Minko Gechev 的回答更正了它。
最佳答案
只有函数有 prototype
属性,但任何对象都有 __proto__
属性。
通常,显式更改 __proto__
属性并不是一个好主意,最好使用类似 Object.create
的东西。
这是一个例子:
function Person() {
}
var proto = { bar: 'baz' };
Person.prototype = proto;
通过这种方式,您使用构造函数 Person
创建的任何对象都将具有引用 proto
的 __proto__
属性
作为结论,我们可以说:
prototype 属性仅用于构造函数,它设置将使用此构造函数创建的所有对象的 __proto__
属性。当解释器正在寻找给定对象 foo
的属性时,它首先使用对象 foo
然后是 foo.__proto__
然后是 foo .__proto__.__proto__
等它是否找到该属性。
关于javascript - 什么时候使用 __proto__ 什么时候使用原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198371/