You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何第三个表达式返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:10:29