短篇系列 -- 我理解的原型链

195 阅读1分钟

一、短篇系列的目的

是的,我决定开启短篇系列来记录我的零碎知识点。到今天为止,我似乎才忽然意识到零碎知识点的重要性,所以特意记录于此,那么今天就拿原型链来开路吧

二、[[Prototype]]、__proto__、prototype 它三到底啥关系?

相信小伙伴肯定不陌生以下名词:

[[Prototype]]、__proto__、prototype、object.constructor.prototype、对象原型

这几个名词放一块很多小伙伴肯定会犯糊涂,不过没事,咱们都可以在MDN上找到相应答案,下面请随我来。

MDN上是这样说的

原型链-1.png

大致流程如下:

  • 当我们访问obj.a时,会先在obj上寻找a属性,如果找到,返回a的值
  • 如果没找到,会继续搜索obj的原型,如果找到,返回a的值
  • 如果还没找到,会继续搜索obj的原型的原型,重复前2个步骤

随后,MDN就给出了相应的代码与解释:

原型链-3.png

从给出的代码与我画红框的地方,我们可以得出以下结论:

  • o.[[Prototype]] == o.__proto__ == o.constructor.prototype
  • o.__proto__ == f.prototype
  • o的原型 == f的原型。o的原型指的是__proto__ 属性, f 的属性指的是prototype属性,这也印证了MDN的补充说明,让我们 不要把o的原型和f的原型混淆,虽然地址都是一样的,但是属性不一样
  • 构造函数的原型的原型 == Object函数的原型

说明 对于结论2,请大家自行console一下

三、最后

好啦,有关原型链的讲解就到此为止啦,如果有讲错或者迷糊的地方欢迎指正。