原型链,顾名思义是一种类似链状结构的指向。
例:Array对象的构造函数有一个原型对象Prototype,这个Prototype对象下有一个属性construct,指向Array的公共属性和方法,Array的实例化对象arr中有个_proto_的属性,如果arr想要获得Array.Prototype中的属性和方法,就需要通过_proto_这个属性,它指向Array原型对象,即arr._proto_ ===Array.Prototype,同时,Array也是有着_proto_这个属性的指向Object.Prototype,即Array.Prototype._proto_ === Object.Prototype
自己的一些理解:
_proto_是指向上一级的原型对象,Prototype是获得构造函数的原型链对象
简单来说,_proto_类似于通过原型链找到继承中的父类
问题:Function是怎么回事?
解答:Function是一个函数,所有函数的_proto_最终指向都是Function.Prototype(函数与原型对象的联系),而Function.Prototype._proto_是指向Object.Prototype最终指向null
所有函数的实例化对象的构造器指向Function()
a.construct = Function()
回看之前写的原型链,发现有一些理解错误的地方,这里就不做更改了,就当看个笑话吧
简单记录一下现在对原型链的看法:
function A (){}
a = new A()
a.__proto__ = A.Prototype
在上面的代码中A是一个函数,而函数也是一种特殊的对象对象,当用new A()调用的时候,A()就相当于是A的构造函数也就是A.construct=A(),同样的A的显式原型A.Prototype=A.construct=A();a作为实例化对象,a.__proto__是它的隐式原型,隐式原型的指向是A的构造函数也就是
a.__proto__=A.construct所以a.__proto__=A.construct(A())=A.Prototype
而A也是有着隐式原型的A.Prototype._proto_ = Object.Prototype
所以a.__proto__.__proto__=Object.Prototype
这就是我眼中的原型链