原型:
每个函数都有Prototype属性,称为原型
因为这个属性的值是个对象,也称为原型对象
作用:
1、存放一些属性和方法
2、在JaveScript中实现继承
例子
const arr = new Array(1,2,3)
arr.sort()
arr.reverse()
通过new Array()这个构造函数创建一个数组。
创建好了之后就可以直接使用sort()、reverse()这些方法,这些方法我们并没有写,但是可以用,原因就是原型的存在。
这里的Array作为构造函数,它有自己的原型Array.prototype
在JS里面,在这个原型身上已经挂载了很多很多方法
当我们通过构造函数生成一个实例arr时,arr就可以使用prototype 原型身上这些方法了,这些方法是可以共享给所有的数组实例使用的。
深入了解实例为什么可以使用原型上这些方法:
首先要知道_proto_ 这个东西,
_proto_:每个对象都有_proto_属性
作用:这个属性可以指向它的原型对象
const arr = new Array(1,2,3)
arr.sort()
arr.reverse()
console.log(arr._proto_ === Array.prototype)//true
arr._proto_ 和构造函数的原型是等价的,_proto_给了arr一条通往原型的路径
所以这样就可以引申出原型链这个概念:
拿对象来说,比如创建一个构造函数叫Person,new一个实例person
拿着person的_proto_就可以找到上一级的原型(Person.prototype)
同样的,只要是对象就会有_proto_,指向更上一级的对象的原型
所以说,如果在自己身上找不到想要的方法还是其他东西的话,还会沿着_proto_提供的这条路线,往上面去找,如果最上面还是没有,就会返回null
这条路线就会称为原型链