对象字面量{}创建的对象原型链为:自身→object.prototype→null,自动继承tostring等方法;__proto__可读取[[prototype]]但不推荐赋值,应使用object.getprototypeof();{}与new object()原型链一致,object.create(null)才能跳过object.prototype。

对象字面量创建时,原型链会自动指向 Object.prototype,这是 JavaScript 引擎的默认行为,无需手动干预。
原型链路径很明确
用 {} 创建的对象,其原型链是:
- 对象自身(自有属性)
- →
Object.prototype - →
null(链的终点)
你可以用 Object.getPrototypeOf({}) === Object.prototype 验证,结果为 true。这也意味着它天然继承了 toString、hasOwnProperty、valueOf 等通用方法。
__proto__ 是隐式原型的访问入口
每个对象都有内部属性 [[Prototype]],在绝大多数环境中可通过 __proto__ 读取(但不推荐赋值)。例如:
const obj = {};
console.log(obj.__proto__ === Object.prototype); // true
console.log(obj.toString()); // "[object Object]"
注意:__proto__ 是历史遗留属性,规范中更推荐使用 Object.getPrototypeOf() 和 Object.setPrototypeOf() 进行安全操作。
和构造函数创建的区别很小
虽然 new Object() 和 {} 写法不同,但它们的原型链完全一致,都指向 Object.prototype。区别仅在于语法简洁性和可读性:
- 字面量
{}:现代开发首选,语义清晰、性能略优 -
new Object():功能等价,但冗余,几乎不再使用
不能跳过 Object.prototype 自动设置
除非显式用 Object.create(null),否则所有普通对象字面量都会挂载在 Object.prototype 下。这意味着:
- 你无法通过
{}直接让对象“没有原型” - 若需要纯净对象(比如用作字典且避免原型污染),必须用
Object.create(null) -
Object.prototype的方法(如hasOwnProperty)在字面量对象上始终可用,除非被显式覆盖或屏蔽
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











