1

__proto__总而言之,我总是被对象的和属性弄糊涂prototype,尤其是在原型继承链中,假设有一个名为 的对象test,代码如下。

test.add();//try to call a method name add.

在我的理解中,我画了一个图表来演示搜索的流程。但我不确定它是否正确。请帮助审查它。谢谢。

在此处输入图像描述

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

在此处输入图像描述

4

1 回答 1

3

只有函数有prototype属性,但任何对象都有__proto__属性。

通常,__proto__最好使用类似Object.create.

这是一个例子:

function Person() {
}
var proto = { bar: 'baz' };
Person.prototype = proto;

这样,您使用构造函数创建的任何对象都Person将具有__proto__引用的属性proto

作为结论,我们可以说:

原型属性仅用于构造函数,它设置__proto__将使用此构造函数创建的所有对象的属性。当解释器在寻找给定对象的属性时,foo它首先使用该对象,然后再使用该对象foofoo.__proto__依此foo.__proto__.__proto__类推,无论是否找到该属性。

于 2013-04-24T17:24:36.040 回答