总之,我总是对对象的__proto__和prototype属性感到困惑,特别是在prototype继承链中,假设有一个名为test的对象,代码如下。
test.add();//try to call a method name add.据我理解,我画了一个图表来演示搜索的流程。但我不确定是否正确,.please帮助审查它,.thanks。

根据Minko的答案对其进行了修正。

发布于 2013-04-24 17:24:36
只有函数具有prototype属性,但任何对象都具有__proto__属性。
通常,更好地使用类似于__proto__的东西来显式地更改__proto__属性并不是个好主意。
下面是一个示例:
function Person() {
}
var proto = { bar: 'baz' };
Person.prototype = proto;这样,使用构造函数Person创建的任何对象都将具有引用proto的__proto__属性。
作为结论,我们可以说:
prototype属性仅用于构造函数,它设置将使用此构造函数创建的所有对象的__proto__属性。当解释器查找给定对象foo的属性时,它首先使用对象foo之后的对象foo,然后是foo.__proto__,然后是foo.__proto__.__proto__等等,然后才能找到该属性。
https://stackoverflow.com/questions/16198371
复制相似问题