一、短篇系列的目的
是的,我决定开启短篇系列来记录我的零碎知识点。到今天为止,我似乎才忽然意识到零碎知识点的重要性,所以特意记录于此,那么今天就拿原型链来开路吧
二、[[Prototype]]、__proto__、prototype 它三到底啥关系?
相信小伙伴肯定不陌生以下名词:
[[Prototype]]、__proto__、prototype、object.constructor.prototype、对象原型
这几个名词放一块很多小伙伴肯定会犯糊涂,不过没事,咱们都可以在MDN上找到相应答案,下面请随我来。
MDN上是这样说的
大致流程如下:
- 当我们访问obj.a时,会先在obj上寻找a属性,如果找到,返回a的值
- 如果没找到,会继续搜索obj的原型,如果找到,返回a的值
- 如果还没找到,会继续搜索obj的原型的原型,重复前2个步骤
随后,MDN就给出了相应的代码与解释:
从给出的代码与我画红框的地方,我们可以得出以下结论:
- o.[[Prototype]] == o.__proto__ == o.constructor.prototype
- o.__proto__ == f.prototype
- o的原型 == f的原型。o的原型指的是__proto__ 属性, f 的属性指的是prototype属性,这也印证了MDN的补充说明,让我们 不要把o的原型和f的原型混淆,虽然地址都是一样的,但是属性不一样
- 构造函数的原型的原型 == Object函数的原型
说明 对于结论2,请大家自行console一下
三、最后
好啦,有关原型链的讲解就到此为止啦,如果有讲错或者迷糊的地方欢迎指正。