彻底了解原型与原型链
即三个磨人的属性:prototype、proto、constructor
咱先从每一个入手
1.prototype
prototype是函数才有的属性,注意对象没有
函数的prototype会指向一个带有constructor的对象
2.proto
函数的__proto__要追溯到原生Function对象,即函数的__proto__等于Function的prototype,
来解释一下:
平是咱们函数声明都是 function a(){} 的方式,由于函数声明其实是 a=new Function();
这样来说就通了
对象的__proto__即被实例化的函数的prototype
字面量的话 如 :
let obj = {} obj.proto__则为Object.prototype
构造的话 如:
function a (){} let b = new a()
b.proto === a.prototype
总结一句话:对象的__proto__指向被实例化的函数的prototype,因为函数也是一种对象
3.constructor
有上面的__proto,constructor就不一一区分
总结一句话:对象的constructor指向被实例化的函数,因为函数也是一种对象
如:
function a (){}
let b = new a()
b.constructor === function a (){}
原型链
即从实例化对象到函数原型逐层查找的过程
如:
查找constructor过程就是原型链
当查找到原生Object的__proto__查不到是则为null
大家发现很多原生方法使用也是原型链查找。
彻底了解原型与原型链
最新推荐文章于 2023-06-03 12:19:03 发布