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

JavaScript中function.constructor与prototype.constructor区别及常见疑问解答

你的基础认知是正确的:JavaScript 中普通函数默认自带 prototype 对象属性,该对象的 constructor 属性默认指向函数本身,因此 person.prototype.constructor === person 的判断完全成立。

疑问1解答

person 本身是一个函数类型的对象,在 JavaScript 中,所有函数都是内置构造函数 Function 的实例。对象的 constructor 属性默认会沿自身隐式原型链(__proto__)向上查找:person 的隐式原型指向 Function.prototype,而 Function.prototype.constructor 就是内置的 Function 构造函数,因此 person.constructor 输出的就是原生实现的 Function 函数代码。

疑问2解答

new person.constructor('third') 本质是执行 new Function('third')。Function 构造函数的参数规则是:最后一个参数为新函数的函数体,前面的参数为新函数的入参。你传入的 'third' 会被当作新函数的函数体,因此最终得到的 obj3 是一个新创建的函数,而非 person 的实例,自然不符合预期。你可以打印 typeof obj3 验证,结果会是 function,而非 object。

疑问3解答

两者的核心区别如下:

  • person.prototype.constructor:是挂载在 person 显式原型对象上的默认自有属性,设计目的是标记该原型对应的构造函数,和 person 完全等价,调用它实例化得到的就是 person 的实例。
  • person.constructor:是 person 作为 Function 的实例,从自身隐式原型链继承来的属性,指向的是 Function,作用是标记 person 这个函数对象本身的构造来源,和 person 要生成的实例没有任何关联。

内容的提问来源于stack exchange,提问作者Rishabh Agrawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:54:01