數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置。咙好。在這個位置可以讀取和寫入值呐粘,數(shù)據(jù)屬性有4個描述其行為的特性。
a.Configurable (默認(rèn)值 true)
表示能否通過delete刪除屬性菩鲜,從而重新定義屬性
b.Enumerable(默認(rèn)值 true)
表示能否通過for-in 循環(huán)返回屬性值。
c.Writable(默認(rèn)值 true)
表示能否修改屬性的值惦积。
d.Value(默認(rèn)值 undefind)
包含這個屬性的數(shù)據(jù)值接校。
var person = {
name:'Nicholas'
}
如果要修改屬性的默認(rèn)特性,必須使用ECMAScript 5 的Object.defineProperty( )方法狮崩,這個方法必須接受3個參數(shù)蛛勉。
(!!!!!!注意:在調(diào)用Object.defineProperty方法,如果不指定睦柴,則Configurable诽凌,Enumerable,Writable默認(rèn)值都為flase )
語法:
Object.defineProperty(屬性所在對象爱只,屬性的名字皿淋,一個描述符對象);
如以下例子:
var person = {};
Object.defineProperty(person,'name',{
writable:false恬试,
value:'Nicholas'
});
alert ( person.name); //'Nicholas'
person.name = 'Greg';
alert ( person.name); //'Nicholas'
這個例子創(chuàng)建了一個名為name的屬性,不過他的值是只讀的疯暑,不可修改训柴。如果嘗試去指定新值,在非嚴(yán)格模式下妇拯,賦值操作被忽略幻馁,嚴(yán)格模式下會拋出錯誤洗鸵。
類似的規(guī)則也適用于不可配置的屬性。
var person = {};
Object.defineProperty(person,'name',{
writable:false.
value:'Nicholas'
});
alert ( person.name); //'Nicholas'
delete person.name仗嗦;
alert ( person.name); //'Nicholas'
我們可以重復(fù)調(diào)用Object.defineProperty()方法去修改同一個屬性膘滨,但在吧configurable特性設(shè)置為false之后就會有限制了。
————————————————————————————————————————————————
*ie8 是第一個兼容Object.defineProperty()方法的瀏覽器(但是有比較嚴(yán)重的限制稀拐,建議不要在ie8使用)