此段講的設值器(setter)與取值器(getter),IE 沒有支援;Firefox, Safari, Chrome 可以正確執行。IE8 開始有支援 __defineGetter__(), __defineSetter__(), __lookupGetter__, __lookupSetter__。IE8 未測試,下次補測。
在物件中,宣告一個特徵與函式的連結,讀取此特徵時,會呼用該函式。其語法是:
get 特徵名 [函式名] () { 指令集 }
函式沒有參數。可選擇性的設函式名。在 Firefox 可以設函式名,但是 Safari, Chrome 會導致失敗,所以不能設函式名。建議不設。
- 請注意:使用時,不要加函式的括號,例如 Jolin.info(),會導致錯誤。
- 筆者曾嘗試將 get 用在 物件製造器,但沒有成功。
在物件中,宣告一個特徵與函式的連結,設定此特徵時,會呼用該函式。其語法是:
set 特徵名 [函式名] ( 值 ) { 指令集 }
可選擇性的設函式名。在 Firefox 可以設函式名,但是 Safari, Chrome 會導致失敗,所以不能設函式名。建議不設。
函式只能有一個參數。在設定特徵時,等號右邊的值會傳給參數。
下例是華氏與攝氏溫度的轉換。
宣告取值器。其語法是:
物件.__defineGetter__( 特徵名字串, 函式 )
- 筆者嘗試將 get 用在 物件製造器,但沒有成功。
宣告設值器。其語法是:
物件.__defineSetter__( 特徵名字串, 函式 )
下面的範例,動態的增加已存在的物件實體之設值器。
也可以接在 prototype 後使用。如此可以增加物件型態及所有物件實體的取值器與設值器。
傳回取值器的函式。其語法是:
物件實體.__lookupGetter__( 取值器字串 )
請勿將設值器用在此。
傳回設值器的函式。其語法是:
物件實體.__lookupSetter__( 設值器字串 )
請勿將取值器用在此。
可以用 delete 刪除設值器與取值器。