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

JavaScript底层是否通过Object构造函数创建对象字面量?

问题解答

结论

这个现象不意味着对象字面量在底层是通过Object构造函数创建的。

具体原因

  • 首先看ECMAScript规范的定义:对象字面量{}的初始化逻辑是直接生成普通对象,直接将其内部[[Prototype]]属性指向Object.prototype,全程不会触发Object构造函数的执行逻辑。
  • 你看到的constructor属性本身不属于你创建的obj对象,而是属于它的原型Object.prototype:Object.prototype.constructor默认指向Object构造函数,这是JS原型链上的固有属性,和obj的创建方式没有关联。

验证反例

你可以手动改写全局Object构造函数验证这个逻辑:

// 重写全局Object构造函数
window.Object = function () {
  this.testValue = '我是构造函数生成的标记'
}
// 用对象字面量创建对象
const obj = {}
console.log(obj.testValue) // 输出 undefined,说明没有执行我们重写的构造函数逻辑
console.log(obj.__proto__.constructor === window.Object) // 输出false,也能说明原型关联是在字面量初始化时直接绑定原生Object.prototype的,和当前全局的Object构造函数无关

内容的提问来源于stack exchange,提问作者Monis Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:15:03