原型链
每个构造函数都有一个原型对象(
prototype
),原型对象都包含一个指向构造函数的指针(constructor
),而实例都包含一个指向原型对象的内部指针(__proto__
)
,假如让原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型对象的指针,相应的,另一个原型对象中也包含着指向另一个构造函数的指针。
假如另一个原型对象又是另一个类型的实例,上述关系层层递进,就构成了实例与原型的链条。
判断原型链上关系的方式
instanceof
—- 判断实例对象与构造函数的关系__proto__
—- 访问实例对象的原型对象(已废弃,不建议使用)constructor
—- 访问原型对象/实例对象对应的构造函数isPrototypeOf()
—- 判断对象之间是否有原型链关系Object.getPrototypeOf()
—- 获取某个实例对象对应的原型对象
修改原型
[构造函数].prototype.[方法]
—- 在原型对象上增加方法[构造函数].prototype = {}
—- 字面量方式修改原型对象,此方式constructor
指向会出现问题,需要重新指定[构造函数1].prototype = new [构造函数2]()
—- 将一个实例对象指定为另一个构造函数的原型,同样需要重新指定constructor
指向Object.create()
—- 以指定对象作为原型来创建实例Object.setPrototypeOf(A, B)
—- 将B设定为A的原型对象