当调用 `new Object()` 构造函数创建对象时

实际过程如下:

1. 创建一个新的空对象。
2. 将该新对象的原型(`__proto__`)指向 `Object.prototype`,使它能够继承 `Object.prototype` 上的属性和方法。
3. 执行构造函数中的代码,如果没有构造函数,则跳过此步骤。
4. 返回新创建的对象。

示例代码如下:

var obj = new Object();

等价于:

var obj = {}; // 使用字面量方式创建空对象

与使用字面量方式创建对象 `{}` 相比,它们有以下区别:

1. 语法

  • 使用 `new Object()` 是通过构造函数的方式创建对象
  • 使用 `{}` 是通过字面量的方式创建对象。


2. 可扩展性

  • 通过 `new Object()` 创建的对象默认是可扩展的,可以动态添加和修改属性
  • 使用 `{}` 创建的对象默认也是可扩展的,但可以使用 `Object.preventExtensions()` 方法禁止扩展。


3. 原型链

  • 通过 `new Object()` 创建的对象的原型是 `Object.prototype`,它可以继承 `Object.prototype` 上的属性和方法
  • 使用 `{}` 创建的对象的原型也是 `Object.prototype`。


4. 构造函数

  • `new Object()` 创建的对象没有特定的构造函数,它是使用 `Object` 构造函数创建的。
  • 使用 `{}` 创建的对象没有关联的构造函数。


5. 简洁性

  • 使用 `{}` 创建对象更加简洁和直观,无需额外的构造函数调用。

结语

`new Object()` 和 `{}` 创建对象的效果是相同的,都会生成一个新的空对象并继承 `Object.prototype`。

而使用 `{}` 字面量方式创建对象更为常见和推荐,因为它更简洁、易读,并且没有额外的构造函数调用。