__proto__总而言之,我总是被对象的和属性弄糊涂prototype,尤其是在原型继承链中,假设有一个名为 的对象test,代码如下。
test.add();//try to call a method name add.
在我的理解中,我画了一个图表来演示搜索的流程。但我不确定它是否正确。请帮助审查它。谢谢。

根据 Minko Gechev 的回答对其进行了更正。

__proto__总而言之,我总是被对象的和属性弄糊涂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
作为结论,我们可以说:
原型属性仅用于构造函数,它设置__proto__将使用此构造函数创建的所有对象的属性。当解释器在寻找给定对象的属性时,foo它首先使用该对象,然后再使用该对象foo,foo.__proto__依此foo.__proto__.__proto__类推,无论是否找到该属性。