最近在看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
判斷,減少效能損耗.