原型和原型链

85 阅读1分钟

原型和原型链

原型:每个函数都有prototype属性,称之为原型;因为这个属性的值是个对象,也称为原型对象。

作用

  1. 存放属性和方法;2.在JavaScript中实现继承。

如以下例子:

const arr = new Array(1,2,3);
arr.reverse()   // 翻转
arr.sort()   // 排序

为什么Array数组创建好后就可以使用reverse或sort等方法?

这就是因为原型的存在,Array是一个构造函数,只要是函数就有原型,即Array.prototype,在这个原型上已经挂载了很多方法。通过构造函数就可以生成arr实例,arr可以使用prototype原型身上的这个方法。

实例为什么可以使用原型身上的这些方法?如何实现?

proto:每个实例对象都有一个__proto__属性

作用: 这个属性指向它的原型对象

console.log(arr.__proto__ === Array.prototype)   // true

image.png

由以上延伸出原型链的概念

概念1:原型链是实现继承的一种机制,每个对象都有一个原型(prototype),原型也是一个对象,它包含一些共享的属性和方法。当访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,Javascript引擎会自动去他的原型对象中查找,如果原型对象中也没有,则会继续向上查找,直到找到或到达原型链的顶端。

概念2:对象都有__proto__属性,这个属性指向它的原型对象,原型对象也是对象,也有__proto__属性,指向原型对象的原型对象,这样一层层形成的链式结构称为原型链,最顶层找不到则返回null。

image.png