记录一下在学习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.prototype为true,我的理解是:Function 本身自己也是一个函数,就像普通函数 foo 一样, foo.__proto__ === Function.prototype为true,把foo替换为其他函数名结果都一样。所以 Function 的隐式原型和显式原型是同一个。
下面的图片直观地展示了隐式原型和显式原型之间的关系
参考文章