原型和原型链 汇总

46 阅读2分钟

引用类型(object、array、function、date、repexp) 都具有对象特性 自由扩展属性

引用类型有着隐型属性proto ,这个属性是个指针指向创造它的构造函数的prototype原型属性,原型可以共享它的属性和方法给创造出来的实例对象使用

而这个原型属性也是一个对象,也有着它的原型,这么一系列指向构成的结构也叫原型链

如果访问对象的某一属性,如果对象本身没有这个属性,就会去它的原型查找,对象原型的顶层就是Object,所以对象类型的数据可以使用object的相关方法

我们可以用new 来让构造函数创造实例,并且知道 实例的proto 等于构造函数的prototype

其中判断数据类型有着instanceof 去检测 用法:实例 instanceof 构造函数 ,判断构造函数的原型属性是否在实例对象上,存在就判断为true

还有着constructor来判断数据类型,可以用来判断某对象是否由某个函数(类)实例化得来;。每一个引用类型都有一个constructor属性,由于自定义构造函数会创建一个特殊的对象类型,因此它的constructor属性在原型未被重写时也就是使用默认原型时指向创建它的构造函数。

总结: 构造函数上有着prototype原型属性,这个原型属性有着构造函数上的变量和方法,当我们new 这个构造函数创建出实例对象,这个实例对象上有着隐性、不可枚举的proto属性,这个属性相当是一个指针,指向创建实例的构造函数上的prototype原型属性,借而在访问该实例的方法时,当该实例上没有这个方法就从原型上查找,原型本身也是一个对象,对象也有着它的原型,找不到的话就沿这条链向上查找,直到查找出来,这样所有的原型构成一条链条就叫原型链。