最近在看vue的源码,发现里面定义一个空对象都是使用Object.create(null)
而不是使用{},
带着这个疑问翻看了一下《JavaScript权威指南》。学习一下对象的申明方式,特在这里做记录和总结。
创建对象的三种方式
- 对象直接量
var empty = {};var point = {x:0,y:0}复制代码
特点:对象直接量是一个表达式,这个表达式的每次运算都创建并初始化一个新的对象。每次计算对象直接量的时候,也都会计算他的每个属性的值。如果在一个重复调用的函数中的循环体内使用了对象直接量,他将创建很多新对象,并且每次创建的属性值有可能不同.
- 通过new创建对象
var o = new Object();复制代码
- Object.create()
它创建了一个新对象,第一参数是这个对象的原型,第二个参数(可选),用以对对象属性做进一步描述.
Object.create()
是一个静态函数,而不是提供给某个对象调用的方法.
var o1 = Object.create({x:0,y:0});// o1继承属性x和y复制代码
可以通过传入null
定义一个没有原型的新对象,通过这种方法不会继承任何东西,包括toString()
等方法.这样创建的空对象在使用它的属性的时候不需要进行hasOwnProperty
判断,减少性能损耗.