文章目录
  1. 1. Object.create(null)的使用场景
  2. 2. 总结一下:

Object.create()的定义
Object.create(proto,[propertiesObject])

proto:新创建对象的原型对象
propertiesObject:可选。要添加到新对象的可枚举(新添加的属性是其自身的属性,而不是其原型链上的属性)的属性

Object.create()方法创建一个新对象,并使用现有的对象来提供新创建的对象的proto.

1
2
3
4
5
Object.create = function (o){
var F = function {};
F.prototype = o;
return new F();
}

可以看到Object.create内部创建了一个新对象(实例),假设叫newObj,默认情况下newObj.__proto__ == F.prototype,在本例中侧重重写了构造函数F的原型属性,最终的原型关系链newObj.__proto__ == F.prototupe == o.

Object.create(null)的使用场景

为什么很多源码作者会使用Object.create(null)来初始化一个新对象呢?这是作者的习惯,还是一个最佳实践?

使用create创建的对象,没有任何属性,显示No properties,我们可以把它当作一个非常纯净的map来使用,我们可以自己定义hasOwnProperty、toString方法,不管是有意还是不小心,我们完全不必担心会将原型链上的同名方法覆盖掉.

另一个使用create(null)的理由是,在我们使用for..in循环的时候会遍历对象原型链上的属性,使用create(null)就不必再对属性进行检查了,当然,我们也可以直接使用Object.keys[]

总结一下:

你需要一个非常干净且高度可定制的对象当作数据字典的时候;

想节省hasOwnProperty带来的一丢丢性能损失并且可以偷懒少些一点代码的时候
用Object.create(null)吧!

其他时候,请用{}。

文章目录
  1. 1. Object.create(null)的使用场景
  2. 2. 总结一下: