原型链
每个构造函数都有一个原型对象(
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的原型对象