原型和原型链
原型:每个函数都有prototype属性,称之为原型;因为这个属性的值是个对象,也称为原型对象。
作用:
- 存放属性和方法;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
由以上延伸出原型链的概念:
概念1:原型链是实现继承的一种机制,每个对象都有一个原型(prototype),原型也是一个对象,它包含一些共享的属性和方法。当访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,Javascript引擎会自动去他的原型对象中查找,如果原型对象中也没有,则会继续向上查找,直到找到或到达原型链的顶端。
概念2:对象都有__proto__属性,这个属性指向它的原型对象,原型对象也是对象,也有__proto__属性,指向原型对象的原型对象,这样一层层形成的链式结构称为原型链,最顶层找不到则返回null。