{}、new Object和Object.create的区别
- 东瓜粥
- 2024-07-23
- 45
1. {} 和 new Object()
{}
和 new Object()
除了本身创建的对象,都继承了 Object
原型链上( Object.prototype )的属性和方法。
当创建的对象相同时,可以说 {}
和 new Object()
实现的效果相同。
const o1 = {};
const o2 = new Object();
console.log('o1', o1); // {}
console.log('o2', o2); // {}
2. Object.create()
Object.create()
以一个现有对象作为原型,创建一个新对象,而本身没有继承 Object.prototype 的属性和方法
语法:
Object.create(proto, propertiesObject)
参数:
参数 | 说明 |
---|---|
proto | 新创建对象的原型对象。 |
propertiesObject | 如果该参数被指定且不为 undefined ,则该传入对象可枚举的自有属性将为新创建的对象添加具有对应属性名称的属性描述符。这些属性对应于 Object.defineProperties() 的第二个参数。 |
const o1 = {};
const o2 = Object.create(o1, {
// foo 是一个常规数据属性
foo: {
writable: true,
configurable: true,
value: 'hello',
},
// bar 是一个访问器属性
bar: {
configurable: false,
get() {
return 10;
},
set(value) {
console.log('Setting `o.bar` to', value);
},
},
});
通过 Object.create(null)
创建的对象是一个干净的对象,也就是没有原型,不继承 Object
原型链上的任何属性。在字面量初始化对象语法中,相当于使用 __proto__
键。
const o3 = Object.create(null);
const o4 = { __proto__: null };
console.log('o3', o3);
console.log('o4', o4);
标签:js