返回
深入探究 Object.create()、new Object() 和 {} 创建对象的异同
前端
2023-12-03 08:04:50
前言
面向对象编程是一门广泛应用的编程范式,在前端开发中更是随处可见。然而,我们经常会疑惑:创建对象的方法何其之多?其中最常见的莫过于字面量方式,比如 let obj = {}
。但是,还有 Object.create()
和 new Object()
两种创建对象的方式,它们究竟有何异同?
1. 语法差异
字面量创建:
let obj = {};
Object.create() 创建:
let obj = Object.create(prototype);
new Object() 创建:
let obj = new Object();
2. 创建对象时的 prototype 设置
字面量创建:
原型为 Object.prototype
。
Object.create() 创建:
原型由 prototype
参数指定,默认值为 null
,表示没有原型。
new Object() 创建:
原型为 Object.prototype
。
3. 内置方法和属性
字面量创建:
obj.hasOwnProperty("property"); // true
obj.toString(); // "[object Object]"
Object.create() 创建:
obj.hasOwnProperty("property"); // false
obj.toString(); // "[object Object]"
new Object() 创建:
obj.hasOwnProperty("property"); // true
obj.toString(); // "[object Object]"
4. 扩展能力
字面量创建:
可以使用扩展运算符直接扩展对象。
Object.create() 创建:
可以使用 Object.assign()
方法扩展对象。
new Object() 创建:
可以使用 Object.assign()
方法扩展对象。
5. 用例对比
字面量创建:
- 创建一个新的空对象,一般用于临时存储数据。
- 创建一个新对象,其属性和方法与另一个现有对象相同,但原型不同。
Object.create() 创建:
- 创建一个新对象,其原型为指定的
prototype
对象。 - 创建一个没有原型的空对象(当
prototype
为null
时)。
new Object() 创建:
- 创建一个新对象,其原型为
Object.prototype
。 - 创建一个空对象,其行为与字面量创建的对象相同。
6. 性能差异
一般情况下,字面量创建 的性能优于 Object.create() 创建 和 new Object() 创建 。
结论
综上所述,字面量创建、Object.create() 和 new Object() 创建对象的方式各有千秋,具体使用场景取决于具体需求。
- 字面量创建: 适用于创建临时对象或具有自定义原型的对象。
- Object.create() 创建: 适用于创建具有特定原型的对象。
- new Object() 创建: 适用于创建具有
Object.prototype
原型的对象,其行为与字面量创建的对象类似。
掌握这三种创建对象的方式,可以帮助我们更加灵活高效地编写代码。