關於訪問器屬性
阿新 • • 發佈:2018-04-19
ron edi ret bject tro get obj 負責 bsp
在寫入屬性時調用的函數
默認值為undefined
訪問器屬性不能直接定義。必須使用 Object.defineProperty()來定義。
例子:
要修改屬性默認的特性,必須使用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是只讀的。這個屬性的值是不可以修改的,如果嘗試為他指定新值,在非嚴格模式下,賦值操作將被忽略,在嚴格模式下,賦值操作將會導致拋出錯誤。
類似的規則也適用於不可配置的屬性。例如:
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之後就會有限制
調用這個方法的時候,如果不指定,configurable、enumerable 和writable特性的默認值都是false
訪問器屬性
訪問器屬性不包含數據值
他們包含一對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
關於訪問器屬性