js之原型链

117 阅读1分钟

原型链

    任何对象都有__proto__属性,指向的是原型对象(propertype属性),原型对象也是对象,那也有__proto__属性,也就是说原型对象也有自己的原型对象。这样形成的链式结构,叫做原型链

    注意:__proto__属性是浏览器的私有属性,存在兼容性问题,只建议本地开发的时候时候,线上如果要访问原型还是使用propertype.xxx去访问

1.构造函数访问原型

  function Person(){} //构造函数

  let person = new Person();

  console.log(person.__proto__ === Person.prototype); //true

另外实例也可以通过__proto__访问到原型//[].__proto__

原型中的constructor属性

它是原型自带的属性

 而这个属性指向的值就是构造函数,看下图

    1)构造函数的原型链如下图

如果我们是构造函数,那么构造函数产生的实例对象->构造函数prototype >Object.property ->null

2)内置对象的原型链

  内置对象Array的原型链

  Let arr = new Array

  arr -> Array.prototype ->Object.prototype->null

如下图

内置对象Date的原型链(和Array类似的)

  date -> Date.prototype -> Object.prototype -> null

  总结:那么我们总结原型链主要还是要学习它的属性查找原则

,

沿着原型链查找

1)首先我们在当前对象上查找是否有该属性,有就直接返回

2)如果没有就去对象原型上查找,如果有,就直接返回

3)如果还是没有找到就沿着原型链进行查找,知道Object.prototype位(Object.prototyp这相当于顶端位置了),有就返回

4)如果还是没有就返回undefined