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

函数原型与Object.__proto__疑问:a.prototype为何不等于Function或Object?

关于函数原型的疑问解答

先明确两个容易混淆的核心概念:

  • __proto__:所有对象(包括函数)的内部原型指针,指向自身构造函数的prototype属性。
  • prototype:只有函数对象拥有这个属性,是用来给它的实例做原型的——当你用new调用函数时,生成的实例的__proto__会直接指向该函数的prototype。

为什么a.__proto__ === Object.__proto__返回true?

你定义的function a(){}是一个函数对象,所有函数都是Function构造函数的实例,所以a.__proto__指向Function.prototype。

而Object本身也是一个构造函数(属于函数对象),它的构造函数同样是Function,所以Object.__proto__也指向Function.prototype。这就是两者相等的原因。

为什么a.prototype不等于Function或Object?

a.prototype是一个普通对象(默认情况下,除了Function.prototype本身是函数,其他函数的prototype都是普通对象),它的作用是给a的实例提供专属的原型属性。比如你给a.prototype.add = function(){}, 用new a()创建的实例就能直接调用.add()方法。

如果a.prototype等于Object,那所有a的实例的__proto__就直接指向Object了——这会抹杀掉a作为独立构造函数的原型层级,你没法给a的实例添加独有的原型方法,完全复用Object的原型逻辑,反而违背了原型链设计的灵活性。

另外补充:a.prototype.__proto__才等于Object.prototype,这保证了a的实例既能继承a.prototype的属性,也能通过原型链继承Object.prototype的通用属性(比如.toString())。

内容的提问来源于stack exchange,提问作者Lynera pintcho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:50:40