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