數據屬性包含一個數據值的位置。。在這個位置可以讀取和寫入值,數據屬性有4個描述其行為的特性。
a.Configurable (默認值 true)
表示能否通過delete刪除屬性,從而重新定義屬性
b.Enumerable(默認值 true)
表示能否通過for-in 循環返回屬性值。
c.Writable(默認值 true)
表示能否修改屬性的值。
d.Value(默認值 undefind)
包含這個屬性的數據值。
var person = {
name:'Nicholas'
}
如果要修改屬性的默認特性,必須使用ECMAScript 5 的Object.defineProperty( )方法,這個方法必須接受3個參數。
(!!!!!!注意:在調用Object.defineProperty方法,如果不指定,則Configurable,Enumerable,Writable默認值都為flase )
語法:
Object.defineProperty(屬性所在對象,屬性的名字,一個描述符對象);
如以下例子:
var person = {};
Object.defineProperty(person,'name',{
writable:false,
value:'Nicholas'
});
alert ( person.name); //'Nicholas'
person.name = 'Greg';
alert ( person.name); //'Nicholas'
這個例子創建了一個名為name的屬性,不過他的值是只讀的,不可修改。如果嘗試去指定新值,在非嚴格模式下,賦值操作被忽略,嚴格模式下會拋出錯誤。
類似的規則也適用于不可配置的屬性。
var person = {};
Object.defineProperty(person,'name',{
writable:false.
value:'Nicholas'
});
alert ( person.name); //'Nicholas'
delete person.name;
alert ( person.name); //'Nicholas'
我們可以重復調用Object.defineProperty()方法去修改同一個屬性,但在吧configurable特性設置為false之后就會有限制了。
————————————————————————————————————————————————
*ie8 是第一個兼容Object.defineProperty()方法的瀏覽器(但是有比較嚴重的限制,建議不要在ie8使用)