javascript 對象 一、數據屬性: [[Configurable]] 表示是否能經過delete刪除屬性從而又一次定義屬性,是否能改動屬性的特性,或者是否能把屬性改動爲訪問器屬性。直接在對象上定義的屬性,它們的默認值爲true [[Enumberable]] 表示是否能經過for-in 循環返回屬性。直接在對象上定義的屬性,它們的這個特性默認值爲true [[Writable]] 表示是否能改動屬性的值。直接在對象上定義的屬性,他們的這個特性默認值爲true [[Value]] 包括這個屬性的數據值。 讀取屬性值的時候,從這個位置讀; 寫入屬性值的時候,把新值保存在這個位置。這個特性的默認值爲undefined var person={}; Object.defineProperty(person, "name", { writable: false, value: "Bruce" }); alert(person.name); //Bruce person.name = "Bao"; alert(person.name); //Bruce 這個樣例建立一個名爲name的屬性,它的值"Bruce"是僅僅讀的。這個屬性的值是不可改動的,假設嘗試爲它指定新值,則在非嚴格模式下,賦值操做將會致使拋出錯誤。 相似的規則也適用於不可配置的屬性。好比: var person = {}; Object.defineProperty(person, "name", { configurable:false, value: "Bruce" }) alert(person.name); //Bruce delete person.name; alert(person.name); //Bruce 把configurable 設置爲false, 表示不能從對象中刪除屬性。假設對這個屬性進行調用delete, 則在非嚴格模式下什麼也不會發生,而在嚴格模式下會致使錯誤。而且,一旦把屬性定義爲不可配置的,就不能再把它變回可配置了。此時,再調用Object.defineProperty()方法改動除writable以外的特性,都會致使錯誤: var person = (); Object.defineProperty(person, "name",{ configurable: false, value: "Bruce" }); //拋出錯誤 Object.defineProperty(person, "name", { configurable: true, value: "Bruce" }); 也就是說可以屢次調用Object.defineProperty()方法改動容許屬性,但在把configurable特性設置爲false以後就會有限制了。 在調用Object.defineProperty()方法時,假設不指定,configurable、enumberable、和writable特性默認值都是false。多數狀況下,可能沒有必要利用Object.defineProperty()方法提供這些高級功能。只是,理解這些概念對理解JavaScript對象卻很實用。