要了解原型链的查找机制,必须了解以下2个概念:
原型对象(prototype)与原型(__proto__)
二者之前的关系:实例对象的__proto__等于创建这个实例对象的构造函数的原型对象.
一.原型对象
所有函数都有原型对象prototype,可以用来节约内存,若要将所有对象的公共方法或属性抽离出来,减少内存占用,那么可以将这些属性和方法放到原型对象上面去,因为原型对象上面所有的属性和方法都是共享的,所有对象实例都可以访问,原型对象只有一个地址,因此可以节约内存.实际上,原型对象也是由顶级对象Object,new出来的实例对象,Object(也是一个内置构造函数),且所有原型对象都有constructor-构造函数属性.
二. __proto__属性
所有对象都有一个属性__proto__,因为原型对象一定有constructor属性,则对象的__proto__一定也有constructor属性,且constructor属性值就是构造函数本身.
可以参考以下图片了解构造函数,实例对象与原型对象三者之间的关系...

三.原型链的查找规则
1.当访问一个对象的属性或方法时,首先查找这个对象自身有没有该属性
2.如果没有就查找它的原型对象,也就是__proto__指向的prototype原型对象
3.如果还没有就查找原型对象的原型对象(Object的原型对象)
4.依此类推直到找到Object为止(null)
参考此图:

本文介绍了JavaScript中原型对象与__proto__属性的概念,解释了如何利用它们来节省内存,并详细阐述了原型链的查找规则。
615

被折叠的 条评论
为什么被折叠?



