【JavaScript】Function的__proto__和prototype

201 阅读1分钟

记录一下在学习Function的显式原型和隐式原型时,存在的几个关系。对象__proto__被称为隐式原型,指向其构造函数的prototype,是对象被创建时内部自带的属性;prototype被称为显示原型,也是在函数被创建的时候自动加上的一个属性。

console.log(Function.__proto__ === Function.prototype)

console.log(Function.__proto__.__proto__ === Object.prototype)
console.log(Function instanceof Object === true)

console.log(Object.__proto__ === Function.prototype)
console.log(Object instanceof Function === true)

obj = new Object()
console.log(obj.__proto__ === Object.prototype)
console.log(obj.__proto__.__proto__ === null)

function foo() {}
console.log(foo.__proto__.__proto__.__proto__ === null)

以上的结果都是 true

对于Function.__proto__ === Function.prototypetrue,我的理解是:Function 本身自己也是一个函数,就像普通函数 foo 一样, foo.__proto__ === Function.prototypetrue,把foo替换为其他函数名结果都一样。所以 Function 的隐式原型和显式原型是同一个。

下面的图片直观地展示了隐式原型和显式原型之间的关系

image.png

参考文章

进阶必读:深入理解 JavaScript 原型