为何第三个表达式返回false?第二个与第三个表达式为何不一致?
为什么第三个console.log返回false?
先看这段代码:
'use strict' function func () {} console.log(Object.getPrototypeOf(func) === Function.prototype) // true console.log(Object.getPrototypeOf(Object.getPrototypeOf(func)) === Object.prototype) // true console.log(Object.getPrototypeOf(Function) === Object.prototype) // false
逐个拆解逻辑:
- 第一个判断
true:func是普通函数,JS里所有函数的直接原型都是Function.prototype,所以这个等式成立。 - 第二个判断
true:先拿到func的原型(也就是Function.prototype),再取它的原型——Function.prototype本质是一个普通对象,它的原型就是Object.prototype,所以等式成立。 - 第三个判断
false:Function是JS的内置构造函数,它有个特殊设定:它的原型就是自身的prototype属性,也就是Function.prototype,而非Object.prototype。所以Object.getPrototypeOf(Function)拿到的是Function.prototype,和Object.prototype不相等,结果自然是false。
第二个和第三个表达式的差异:
第二个表达式是取「普通函数的原型的原型」,第三个是取「Function构造函数自身的原型」,两者指向原型链上的不同节点,结果当然不一致。
内容的提问来源于stack exchange,提问作者user1151816
相关产品推荐
相关产品推荐

