雖然說現在并不是所有的浏覽器都已經支援ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被廣大浏覽器廠商廣泛接受,目前主流的浏覽器中隻有低版本的IE不支援,其它都或多或少的支援了ECMAScript5的新特性,其中重中之重自然是一切對象的基類型——Object
這個方法用于建立一個對象,并把其prototype屬性指派為第一個參數,同時可以設定多個descriptors,關于decriptor下一個方法就會介紹這裡先不說。隻需要這樣就可以建立一個原型鍊幹淨對象了


想明白這兩個函數必須明白descriptor是什麼,在之前的JavaScript中對象字段是對象屬性,是一個鍵值對,而在ECMAScript5中引入property,property有幾個特征
1. value:值,預設是undefined
2. writable:是否是隻讀property,預設是false,有點像C#中的const
3. enumerable:是否可以被枚舉(for in),預設false
4. configurable:是否可以被删除,預設false
同樣可以像C#、Java一樣些get/set,不過這兩個不能和value、writable同時使用
5.get:傳回property的值得方法,預設是undefined
6.set:為property設定值的方法,預設是undefined


也可以使用defineProperties方法同時定義多個property,


這個方法用于擷取defineProperty方法設定的property 特性
擷取所有的屬性名,不包括prototy中的屬性,傳回一個數組
例子中可以看到prototype中的name屬性沒有擷取到
和getOwnPropertyNames方法類似,但是擷取所有的可枚舉的屬性,傳回一個數組
上面例子可以看出不可枚舉的sex都沒有擷取的到
方法用于鎖住對象屬性,使其不能夠拓展,也就是不能增加新的屬性,但是屬性的值仍然可以更改,也可以把屬性删除,Object.isExtensible用于判斷對象是否可以被拓展


方法用于把對象密封,也就是讓對象既不可以拓展也不可以删除屬性(把每個屬性的configurable設為false),單數屬性值仍然可以修改,Object.isSealed由于判斷對象是否被密封
終極神器,完全當機對象,在seal的基礎上,屬性值也不可以修改(每個屬性的wirtable也被設為false)
上面的代碼都是在Chrome 29下一嚴格模式(’use strict’)運作的,而且提到的方法都是Object的靜态函數,也就是在使用的時候應該是Object.xxx(x),而不能以對象執行個體來調用。總體來說ES5添加的這些方法為javaScript面向對象設計提供了進一步的可配置性,用起來感覺很不錯。
本文轉自魏瓊東部落格園部落格,原文連結:http://www.cnblogs.com/dolphinX/p/3348467.html,如需轉載請自行聯系原作者