国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

ECMAScript5中的對象存取器屬性:getter和setter介紹

2024-05-06 16:11:40
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了ECMAScript5中的對象屬性存取器:getter和setter介紹,事實上在除ie外最新主流瀏覽器的實現中,任何一個對象的鍵值都可以被getter和setter方法所取代,這被稱之為“存取器屬性”,需要的朋友可以參考下
 
 

顯然這是一個無關IE(高級IE除外)的話題,盡管如此,有興趣的同學還是一起來認識一下ECMAScript5標準中getter和setter的實現。在一個對象中,操作其中的屬性或方法,通常運用最多的就是讀(引用)和寫了,譬如說o.get,這就是一個讀的操作,而o.set = 1則是一個寫的操作。事實上在除ie外最新主流瀏覽器的實現中,任何一個對象的鍵值都可以被getter和setter方法所取代,這被稱之為“存取器屬性”。

毫無疑問,getter負責查詢值,它不帶任何參數,setter則負責設置鍵值,值是以參數的形式傳遞,在他的函數體中,一切的return都是無效的。和普通屬性不同的是,存儲器屬性在只聲明了get或set時,對于讀和寫是兩者不可兼得的,當它只擁有了getter方法,那么它僅僅只讀,同樣的,當它只有setter方法,那么您讀到的永遠都是undefined。如何聲明對象存儲器屬性呢? 最快捷的途徑就是利用對象字面量的語法來寫了,請看下述一段代碼:

 

復制代碼代碼如下:

var oo = {
    name : '賢心',
    get sex(){
        return 'man';
    }
};
//顯然這是不允許的,因為賢心并不希望外界去改變他是男性的事實,所以對于sex只設置了只讀功能
oo.sex = 'woman';
console.log(oo.sex); //結果依然是man

 

有意思的是,這顛覆了我們以往的理解,就是在方法定義時并未用function關鍵字。事實上這里的get或set,你可以理解為兩種不同狀態下的function:包容的一面(寫),安全的一面(讀),當一種整體被肢解為不同的形態,意味著我們可能不再需要在表現形式上遵循傳統,所以我們并沒有使用冒號將鍵和值分開。那么,繼續上面的例子。你將如何在存儲器屬性的基礎上變得讀寫兼備呢,也許下面的一段會給你帶來答案:

 

復制代碼代碼如下:

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); //結果woman

 

或許你會覺得這是多此一舉的,因為我們完全可以忽視get和set,直接讓sex方法具備兩種權限。 但之所以我們將get和set單獨拿出來,是為了更加清晰地理解ECMAScript5對javascript對象鍵值操作中,一個更為嚴謹的詮釋。 當然,在IE污染的中國,新型的主流技術總是顯得格格不入,在實際的項目開發中,也許你永遠不會用到get和set,但誰又能保證以后不會呢……


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 航空| 雷山县| 锡林郭勒盟| 遵化市| 南投市| 方正县| 共和县| 兴宁市| 五大连池市| 赫章县| 中西区| 昌吉市| 米泉市| 宜昌市| 仙桃市| 威海市| 五大连池市| 卢湾区| 大关县| 肇州县| 台州市| 五莲县| 会泽县| 菏泽市| 嘉祥县| 宿迁市| 高州市| 陵水| 淳化县| 石柱| 翁源县| 阳谷县| 新巴尔虎右旗| 巫山县| 荣成市| 开平市| 惠来县| 开封县| 开封县| 修武县| 衡山县|