为何新建对象的原型是构造函数而非Object或Object.prototype?
关于对象原型的误解澄清
首先明确:用let testObject = {}创建的对象,它的原型就是Object.prototype,你觉得它是构造函数,大概率是判断原型的方式出了问题。
关键概念区分
Object是构造函数,用于创建普通对象;Object.prototype是所有普通对象的原型(Object.create(null)创建的对象除外);- 对象的原型可以通过标准方法
Object.getPrototypeOf()获取,浏览器中也支持非标准的__proto__属性直接访问。
你可能的判断误区
如果你是通过testObject.__proto__.constructor来判断原型,那这个值确实是Object构造函数,但这不是原型本身——constructor是Object.prototype上的一个属性,它指向的是创建该原型所属对象的构造函数,也就是Object。
验证正确原型的代码示例
let testObject = {}; // 标准方法验证 console.log(Object.getPrototypeOf(testObject) === Object.prototype); // 输出 true // 非标准但常用的__proto__验证 console.log(testObject.__proto__ === Object.prototype); // 输出 true
额外补充
{}语法和new Object()完全等价,它们创建的对象都会把Object.prototype作为原型。而Object构造函数本身的原型是Function.prototype,别把构造函数和原型对象搞混。
内容的提问来源于stack exchange,提问作者user21998780
相关产品推荐
相关产品推荐

