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

函数构造函数原型链疑问:为何未指向Function.prototype?

原型链疑惑解惑

你混淆了实例对象的原型链和函数对象自身的原型链,这是两条完全独立的路径,分开来看就清楚了:

1. 实例name的原型链

name是通过new Fun2()创建的普通对象(不是函数),它的原型链遵循「实例 -> 构造函数的prototype -> Object.prototype -> null」:

  • name.__proto__指向Fun2.prototype(因为Fun2是name的构造函数)
  • Fun2.prototype本身是一个默认的普通对象(本质是Object的实例),所以它的__proto__指向Object.prototype
  • 最终name.__proto__.__proto__ === Object.prototype,这完全符合预期。

2. 函数Fun2自身的原型链

Fun2作为函数对象,所有函数都是Function构造函数的实例,它的原型链是「函数对象 -> Function.prototype -> Object.prototype -> null」:

  • 验证一下:
    console.log(Fun2.__proto__ === Function.prototype); // 输出 true
    console.log(Fun2.__proto__.__proto__ === Object.prototype); // 输出 true
    
    你看,Fun2并没有跳过Function.prototype这一步,只是你之前看的是实例name的链,不是Fun2自身的链。

关键区分点

  • 实例对象的原型链,终点是Object.prototype
  • 函数对象的原型链,会先经过Function.prototype,再到Object.prototype
  • 不要把「构造函数的原型(Fun2.prototype)」和「构造函数自身的原型(Fun2.__proto__)」搞混,这是两个完全不同的属性。

内容的提问来源于stack exchange,提问作者j obe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:50:25