什么是原型链
原型链是一种对象继承机制,每个对象在内存中指向另一个对象,称之为原型,以此类推,组合成链式结构的相互引用,叫做原型链。
原型链有什么作用
原型链实现了继承,当你访问一个属性或者方法,对象本身没有,回去它的原型(改造函数)中寻找,如果没有,会继续往上查找,知道找打为止。
原型链为了减少代码冗余,提高代码复用性做出来重大贡献。如果你有一个方法,在多个地方使用,每次都需要重新定义,或者引入,使用原型链就可以简化操作。
prototype 介绍
作为函数时只需关注prototype 属性即可
prototype属性的作用就是让该函数所实例化的对象们都可以找到公用的属性和方法
proto 、constructor 介绍
作为对象时需要关注__proto__ 、constructor 。
__proto__属性的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null,再往上找就相当于在null上取值,会报错。通过__proto__属性将对象连接起来的这条链路即我们所谓的原型链。
相同点
- _proto__和constructor属性是对象所独有的;
- prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__和constructor属性。
不同点
- proto_ 和 prototype 返回构造函数的中的属性,比如:
{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
- constructor返回值是函数的引用,不是函数名,比如:
Object() { [native code] }
。。。