什么是原型链
一个对象有原型对象,它的原型对象也有自己的原型对象,一直往上找,找到Object对象,Object对象的的原型对象是null,在往上就没了。这个像链式一样的结构称为原型链。其本质描述的是对象的一种继承关系。就是说一个对象是怎么来的,是继承自它的原型对象。所以说绝大多数对象,其实都是继承自Object这个构造函数的原型对象,为什么是大多数,因为我们可以通过修改构造函数的原型来破坏这种继承关系,可以,但没必要
看图
–> 代表 继承自
__proto __ 指向 实例的原型对象(浏览器的实现方法,非ECMA标准方法)
继承关系:o --> Object.prototype --> null
继承关系:a --> Array.prototype --> Object.prototype --> null
继承关系:a --> Function.prototype --> Object.prototype --> null
继承关系:cat --> Animal.prototype --> Object.prototype --> null
继承关系:ssc --> People.prototype --> Animal.prototype --> Object.prototype --> null
继承关系:a --> Foo.prototype
通过修改构造函数Foo的prototype来破坏继承关系
上面修改了Foo原型对象中的__proto__属性为null
导致Foo的实例a想要通过属性__proto__来找到自己的原型对象,找不到
进而终止了此原型链,
但是继承关系依然保留有,证据就是实例a可以访问到Foo.prototype中的属性prop1
a访问不到Object的属性hasOwnProperty,说明它不是从Object继承来的,继承关系被破坏