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
相关产品推荐
相关产品推荐

