何时使用__proto__以及何时使用原型

时间:2013-04-24 17:23:31

标签: javascript

所有,我总是对对象的__proto__prototype属性感到困惑,特别是在原型继承链中,假设有一个名为test的对象,代码是下方。

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

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

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:3)

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

通常,更改__proto__属性明确更好地使用Object.create之类的内容并不是一个好主意。

以下是一个例子:

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

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

作为结论,我们可以说:

prototype属性仅用于构造函数,它设置将使用此构造函数创建的所有对象的__proto__属性。当解释器正在查找给定对象foo的属性时,它首先在foofoo.__proto__之后使用对象foo.__proto__.__proto__,然后找到该属性