Skip to content

原型链

对象怎么来的:new 出来的。

js
function A() {}
const a = new A()

const b = {}
// 语法糖,相当于 b = new Object()

函数 A 有一个 prototype 属性。

对象 a 有一个属性 __proto__

此时 a.__proto__ === A.prototype

js
function A() {}
const a = new A()
A.prototype
> {}
a.__proto__
> {}
A.prototype === a.__proto__
> true

alt text

proto 来自 Object,此时可以考虑 proto 的原型关系。

Object 是一个函数,所以 Object 也有一个原型 proto2

此时 aA 的原型的原型同时指向 Object 的原型 proto2

proto2 也是一个对象,但不能来自 Object,否则无限递归了。js 将其指定为 null

alt text

由于 Object 同时是一个函数,函数都是由 Function new 出来的。所以 ObjectFunction 也有原型关系。

js
Object.__proto__ === Function.prototype
true

alt text

同时,Objectproto2proto3 之间也存在原型关系。

alt text

接下来观察 AFunction,由于 function A() {} 相当于 A = new Function(),所以 AFunctionproto3 之间也存在原型关系。

alt text

js
A.__proto__ === Function.prototype
> true

特别地,Function 的隐式原型指向自己的原型。

js
Function.prototype === Function.__proto__
> true

alt text

完整原型链

alt text

评论区
评论区空空如也
发送评论
名字
0 / 20
邮箱
0 / 100
评论内容
0 / 140
由于是非实名评论,所以不提供删除功能。如果你需要删除你发送的评论,或者是其他人的评论对你造成了困扰,请 发邮件给我 。同时评论区会使用 AI + 人工的方式进行审核,以达到合规要求。

© thebestxt.cc
辽ICP备16009524号-8
本站所有文章版权所有,转载请注明出处