如何理解prototype和__proto__的区别呢?
prototype
是构造函数的一个属性,__proto__
是实例的一个属性。使用构造函数生成的实例的 __proto__
属性会指向构造函数 prototype
属性所指向的对象。
嗯,就是这样。
从作用上来说:prototype
确定了当利用构造器或字面量形式定义对象时 __proto__
的默认值
__proto__
是 js 引擎原型链搜索的依据
所以重点在于当你要更改原型链的搜索方式时,可以通过更改构造器 prototype
来改变后续所有实例化对象的原型链查找方式,利用 __proto__
来修改单个对象的原型链查找.
Prototype是函数的方法,__proto__是一个经过实例化的对象的方法,它们的作用是一样的,都是指向原型链。
function Fruit() {};
var apple = new Fruit();
apple.__proto__ === Fruit.prototype; // true
apple.constructor === Fruit.prototype.constructor // true
constructor也是同理。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
构造函数访问原型时,通常通过
prototype
来访问,例如我们往原型上添加方法当new出来的实例访问原型时,在一些支持的浏览器中
结论:
prototype
是作为构造函数去访问原型,而__proto__
是作为实例去访问原型。当自身身份不一样,即使一个方法同时调用两者时,访问到的可能是不同的原型。