盘古开天辟地,混沌初开...
我们思考一个问题,我们从来没有实现过数组的push、pop方法,但是当我们定义一个数组,似乎天然就能调用 push、pop 方法,那这些方法是从哪来的?谁帮我们实现的?
JS原型链
1、JS 代码还没运行的时候,JS 环境里已经有一个 window 对象了
2、window 对象上有一个 Object 对象 和 一个 Array 对象,这两对象都有一个 prototype 属性
3、每当我们声明一个对象时,该对象都有一个名为 __proto__ 的内部属性,这个属性指向该对象的原型(prototype)
4、当我们访问JS对象的某个属性,如果该对象本身不存在该属性,则会顺着原型链往上查找,直到找到这个属性
JS原型链解决什么问题?
通过原型链解决了JS对象的继承问题
子对象可以通过原型链访问父对象的属性和方法,实现代码的复用