ECMAScript5中的對象存取器屬性:getter和setter介紹
顯然這是一個無關(guān)IE(高級IE除外)的話題,盡管如此,有興趣的同學(xué)還是一起來認識一下ECMAScript5標(biāo)準中g(shù)etter和setter的實現(xiàn)。在一個對象中,操作其中的屬性或方法,通常運用最多的就是讀(引用)和寫了,譬如說o.get,這就是一個讀的操作,而o.set = 1則是一個寫的操作。事實上在除ie外最新主流瀏覽器的實現(xiàn)中,任何一個對象的鍵值都可以被getter和setter方法所取代,這被稱之為“存取器屬性”。
毫無疑問,getter負責(zé)查詢值,它不帶任何參數(shù),setter則負責(zé)設(shè)置鍵值,值是以參數(shù)的形式傳遞,在他的函數(shù)體中,一切的return都是無效的。和普通屬性不同的是,存儲器屬性在只聲明了get或set時,對于讀和寫是兩者不可兼得的,當(dāng)它只擁有了getter方法,那么它僅僅只讀,同樣的,當(dāng)它只有setter方法,那么您讀到的永遠都是undefined。如何聲明對象存儲器屬性呢? 最快捷的途徑就是利用對象字面量的語法來寫了,請看下述一段代碼:
var oo = {
name : '賢心',
get sex(){
return 'man';
}
};
//顯然這是不允許的,因為賢心并不希望外界去改變他是男性的事實,所以對于sex只設(shè)置了只讀功能
oo.sex = 'woman';
console.log(oo.sex); //結(jié)果依然是man
有意思的是,這顛覆了我們以往的理解,就是在方法定義時并未用function關(guān)鍵字。事實上這里的get或set,你可以理解為兩種不同狀態(tài)下的function:包容的一面(寫),安全的一面(讀),當(dāng)一種整體被肢解為不同的形態(tài),意味著我們可能不再需要在表現(xiàn)形式上遵循傳統(tǒng),所以我們并沒有使用冒號將鍵和值分開。那么,繼續(xù)上面的例子。你將如何在存儲器屬性的基礎(chǔ)上變得讀寫兼?zhèn)淠兀苍S下面的一段會給你帶來答案:
var oo = {
name : '賢心',
get sex(){
if(this.sexx){
return this.sexx;
}else{
return 'man';
}
}, set sex(val){
this.sexx = val;
}
};
//噢,他如此包容,乃至于人們改變他的性別,他也接受
oo.sex = 'woman';
console.log(oo.sex); //結(jié)果woman
或許你會覺得這是多此一舉的,因為我們完全可以忽視get和set,直接讓sex方法具備兩種權(quán)限。 但之所以我們將get和set單獨拿出來,是為了更加清晰地理解ECMAScript5對javascript對象鍵值操作中,一個更為嚴謹?shù)脑忈尅?當(dāng)然,在IE污染的中國,新型的主流技術(shù)總是顯得格格不入,在實際的項目開發(fā)中,也許你永遠不會用到get和set,但誰又能保證以后不會呢……
相關(guān)文章
js+css實現(xiàn)的圓角邊框TAB選項卡滑動門代碼分享(2款)
這篇文章主要為大家詳細介紹了兩種js+css實現(xiàn)的圓角邊框TAB選項卡滑動門效果,很實用的代碼,推薦給大家,有需要的小伙伴可以參考下2015-08-08圖片旋轉(zhuǎn)、鼠標(biāo)滾輪縮放、鏡像、切換圖片js代碼
這篇文章主要為大家介紹了圖片旋轉(zhuǎn)、鼠標(biāo)滾輪縮放、鏡像、切換圖片js代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01javascript匿名函數(shù)中的''return function()''作用
這篇文章主要介紹了javascript匿名函數(shù)中的'return function()'作用介紹,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-10-1027個JavaScript數(shù)組常見方法匯總與實例說明
這篇文章主要介紹了JavaScript數(shù)組常見方法匯總與實例說明包括數(shù)組修改,數(shù)組增加,數(shù)組遍歷,數(shù)組排序等操作,需要的朋友可以參考下2022-12-12bootstrap table插件的分頁與checkbox使用詳解
這篇文章主要為大家詳細介紹了bootstrap table插件的分頁與checkbox使用詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07關(guān)于使用 jBox 對話框的提交不能彈出問題解決方法
在 ASP.NET Form 中使用 jBox 的時候,在按鈕注冊的客戶端點擊事件中,會發(fā)現(xiàn)不能彈出對話框問題2012-11-11