關於訪問器屬性

 

要修改屬性默認的特性,必須使用ECAMScript 5的 Object.defineProperty() 方法。
例如:函數

var person = {};
Object.defineProperty(
person,'name',{
writable:false,
value:'tom'
}
);
console.log(person.name);//tom
person.name = 'join';
console.log(person.name);//tom

 

這個例子建立了一個名爲name的屬性,他的值爲tom是隻讀的。這個屬性的值是不能夠修改的,若是嘗試爲他指定新值,在非嚴格模式下,賦值操做將被忽略,在嚴格模式下,賦值操做將會致使拋出錯誤。
相似的規則也適用於不可配置的屬性。例如:this

var person = {};
Object.defineRroperty(person,'name',{
configurable:false,
value:'tom'
});
console.log(perso.name);//tom
delete person.name;//false
console.log(person.name);//tom

 

能夠屢次調用Object.defineProperty()方法修改同一個屬性,可是把configurable特性設置爲false以後就會有限制spa

調用這個方法的時候,若是不指定,configurable、enumerable 和writable特性的默認值都是falsecode

訪問器屬性
訪問器屬性不包含數據值
他們包含一對getter和setter函數(不過,這兩個函數都不是必須的)
在讀取訪問器屬性的時候,會調用getter函數,這個函數複製返回有效的值。
在寫入訪問器屬性的時候,會調用setter函數,並傳入新值,這個函數負責決定如何處理數據。
訪問器屬性有以下四個特性
configurable
表示可否經過delete刪除屬性從而從新定義屬性,可否修改屬性的特性,或者可否把屬性修改成數據屬性。
直接在對象時定義的屬性,這個特性的默認值爲true
enumerable
保溼可否經過for-in循環返回屬性。
直接在對象上定義的屬性,這個特性的默認值爲true
get
在讀取屬性時調用的函數
默認值爲undefined
set
在寫入屬性時調用的函數
默認值爲undefined
訪問器屬性不能直接定義。必須使用 Object.defineProperty()來定義。
例子:對象

var book = {
_year:2004,
edition:1
}

Object.defineProperty(book,'year',{
get: function(){
return this._year;
},
set: function(newValue){
if(newValue >2004){
this._year = newValue;
this.edition += newValue-2004

}
}
});
book.year = 2005;
console.log(book.edition);// 2
相關文章
相關標籤/搜索