Object.create()的定义:
Object.create(proto, [propertiesObject])
- proto: 新创建对象的原型对象
- propertiesObject:可选参数。要添加新对象的可枚举属性(新添加的属性是自身的属性,而不是其原型链上的属性)
Object.create(null) 与 {…} 的区别:
首先看一下经常使用的 {} 创建的对象是什么样子:
var a = { a: 1};
console.log(a);
由图可以看出,新创建的对象继承了Object自身的方法,这些方法可以在新对象上直接使用。
再看看使用Object.create()创建的对象:
var a = Object.create(null, {
o: {
writable: true,
value: 'wyf'
}
});
console.log(a);
新创建的对象除了自身属性o外,原型链上没有任何属性,也就是说没有继承Object的任何东西,如果此时调用a.toString()则会报错 Uncaught TypeError。
所以当需要一个非常干净且高度可定制的对象当做数据字典的时候可以使用Object.create(null)来创建空对象。