javascript原型链是什么?[[prototype]]、prototype、__proto__属性到底什么关系?史上最强回答,用18句话详细且透彻的讲清楚js原型链原理!

什么是js原型链,它有多重要?

按照我这18步思路,一条一条去理解,很简单!有问题写到评论区!!

  1. 除了箭头函数,不论js内置函数还是声明的函数,一切函数都是构造函数。
  2. 一切对象都是通过某一个构造函数创造而来;只不过有时候是程序员主动用new创造,有时是js引擎自动用new创造。
  3. 又因为一切函数都是对象。
  4. 所以一切函数也都是通过Function这个特殊函数构造而来。
  5. 同时包括Function这个函数它自己,也是通过它自己Function这个函数构造而来。
  6. 所有构造函数都有prototype属性并指向一个对象。
  7. 构造函数创造出的对象,默认有一个隐形属性[[prototype]],并与这个构造函数的prototype属性指向的同一个对象。
  8. 而如果通过Object.creact()创建对象,还可以自定义[[prototype]]属性指向哪个对象。
  9. 可想而知,任何对象都有[[prototype]]属性,并指向另一个对象,这个对象被称为其原型对象。
  10. 获取任何一个对象的某个属性值,如果对象中没有该属性,就会顺着隐藏属性[[prototype]]找到其指向的原型对象,从中再找该属性。如果还找不到,会以次类推向上找,最终必然能找到Object.prototype这个对象。
  11. 顺着每个对象隐藏属性[[prototype]]向上找,直到找到Object.prototype这个对象,这个查找的路径就是原型链。
  12. 切记Object.prototype只不过是一个对象的名字,代表着构造函数Object是对象,同时有一个prototype属性,该属性默认指向了一个JS引擎自带且一个非常强大的对象。
  13. Object.prototype指向的这个强大对象,就是是原型链的源头对象。
  14. 这个原型链的源头对象内置非常多的属性,很多属性又指向具备强大功能的内置函数。
  15. 那么所有的对象,都可以顺着原型链找到并调用Object.prototype中属性指向的函数,从而实现强大功能。
  16. 比如程序员执行obj.toString(),就是通过obj这个普通对象,顺着原型链找到Object.prototype中的toString属性,该属性指向一个函数。obj.toString()就是调用该函数。
  17. 执行obj.toString()的原理是把obj指向的对象作为this的指向,执行toString函数,在toString函数中将this指向的对象转换成字符串,并返回该字符串,从而达到了我们想要的效果。
  18. 整个javascript语言体系就是这样构建起来的。

送给大家一张网上找的原型图,感谢画图的前辈!

在这里插入图片描述
图中的__proto__本身不是js语言自带的属性,但是因为[[prototype]]属性是隐形的,所以很多浏览器包括nodejs,都会自动给对象显性的加一个__proto__属性,与[[prototype]]属性指向同一个对象,即:原型对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值