JavaScript中的getter與setter方法

概述

  • get和set為對象創(chuàng)造了一個偽屬性的定義
  • get方法返回一個值酒奶,set方法為一個屬性賦值

get語法

{ get prop () {} }   //prop是要綁定到給定函數(shù)的屬性名
{ get [expression] () {} } 
/*
 *expression是一個計算屬性名的表達式
 *例如:var expresstion = 'a';
 *           var b = { [expression]: 'c' };
*/
  • 例子:
    在新對象初始化時定義一個getter
    這會給對象obj定義一個偽屬性add灶似,他會返回數(shù)組中最后一個元素
var obj = {
    a: ['a', 'b', 'c'],
    get add () {
        if(this.a.length == 0) return undefined;
        return this.a[this.a.length - 1];
    }
}

console.log(obj.add);  //expect output : c

注意,get定義的偽屬性無法被賦值

描述

  • 有時需要允許訪問返回動態(tài)計算值的屬性终吼,或者你可能需要反映內(nèi)部變量的狀態(tài),而不需要使用顯式方法調(diào)用氯哮。在JavaScript中际跪,可以使用 getter 來實現(xiàn)。雖然可以使用 getter 和 setter 來創(chuàng)建一個偽屬性類型喉钢,但是不可能同時將一個 getter 綁定到一個屬性并且該屬性實際上具有一個值姆打。

  • 使用get語法時注意:
    1.它的標識符可以是數(shù)字或字符串;
    2.它必須有一個明確的參數(shù)肠虽;
    3.在對象字面量中幔戏,不能為一個已有真實值的變量使用 ,也不能為一個屬性設(shè)置多個 get
    {get x(v) {}, get x(v) {}}{get x(v) {}, x: 'a'}是不允許的

一種額外的優(yōu)化方案

一種額外的優(yōu)化技術(shù)是用智能或記憶化 getters 延遲屬性值的計算并將其緩存以備以后訪問税课。該值是在第一次調(diào)用getter 時計算的闲延,然后被緩存,因此后續(xù)訪問返回緩存值而不重新計算它韩玩。這在以下情況下很有用:
  • 如果屬性值的計算是昂貴的(占用大量RAM或CPU時間垒玲,產(chǎn)生工作線程,檢索遠程文件等)找颓。
  • 如果現(xiàn)在不需要該值合愈。它將在稍后使用,或在某些情況下它根本不使用。
  • 如果被使用佛析,它將被訪問幾次益老,并且不需要重新計算該值將永遠不會被改變,或者不應(yīng)該被重新計算寸莫。

例如:

get notifier () {
    delete this.notifier;
    return this.notifier = document.getElementById('none');
}

上面的例子表明當調(diào)用obj.notifier時捺萌,先刪掉這個偽屬性,然后重新給這個屬性賦一個顯性的值储狭,并返回這個值互婿,再以后調(diào)用這個屬性就不會有g(shù)et方法,屬于一種getter的懶調(diào)用辽狈,只計算一次慈参。

set語法

set prop (val) {
    this.xxx.push (val);
}
set [expression] (val) {
    this.xxx.push (val);
}
  • prop是屬性名,val是傳進來的值刮萌,必寫驮配,expression是計算屬性名

例子

var obj = {
    set current (val) {
        this.log.push(val);
    },
    log: []
 }

obj.current = 'a';  //obj.log = ['a']
obj.current = 'b';  //obj.log = ['a', 'b']

注意:current屬性是未定義的,被訪問時會返回undefined

描述

  • 在 javascript 中着茸,如果試著改變一個屬性的值壮锻,那么對應(yīng)的 setter 將被執(zhí)行。setter 經(jīng)常和 getter 連用以創(chuàng)建一個偽屬性涮阔。不可能在具有真實值的屬性上同時擁有一個 setter 器猜绣。

  • 使用setter語法時注意:
    1.它的標識符可以是數(shù)字或字符串;
    2.它必須有一個明確的參數(shù)敬特;
    3.在對象字面量中掰邢,不能為一個已有真實值的變量使用 set ,也不能為一個屬性設(shè)置多個 set
    {set x(v) {}, set x(v) {}}{set x(v) {}, x: 'a'}是不允許的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伟阔,一起剝皮案震驚了整個濱河市辣之,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌皱炉,老刑警劉巖怀估,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異合搅,居然都是意外死亡多搀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門灾部,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酗昼,“玉大人,你說我怎么就攤上這事梳猪。” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵春弥,是天一觀的道長呛哟。 經(jīng)常有香客問我,道長匿沛,這世上最難降的妖魔是什么扫责? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮逃呼,結(jié)果婚禮上鳖孤,老公的妹妹穿的比我還像新娘。我一直安慰自己抡笼,他們只是感情好苏揣,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著推姻,像睡著了一般平匈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藏古,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天增炭,我揣著相機與錄音,去河邊找鬼拧晕。 笑死隙姿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的厂捞。 我是一名探鬼主播输玷,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蔫敲!你這毒婦竟也來了饲嗽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奈嘿,失蹤者是張志新(化名)和其女友劉穎貌虾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裙犹,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡尽狠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叶圃。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袄膏。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖掺冠,靈堂內(nèi)的尸體忽然破棺而出沉馆,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布斥黑,位于F島的核電站揖盘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锌奴。R本人自食惡果不足惜兽狭,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鹿蜀。 院中可真熱鬧箕慧,春花似錦、人聲如沸茴恰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琐簇。三九已至蒸健,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間婉商,已是汗流浹背似忧。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丈秩,地道東北人盯捌。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蘑秽,于是被迫代替她去往敵國和親饺著。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔肠牲,今天18年5月份再次想寫文章幼衰,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,760評論 2 9
  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,278評論 1 6
  • 1.你所看到的別人只是別人想展示給你看的一部分而已; 2.在空閑的時光里缀雳,任何有一點野心的家伙都會想方設(shè)法提升自己...
    youngchou1997閱讀 396評論 0 1
  • 今天7月19日渡嚣,農(nóng)歷六月二十六,正處在一年當中最熱的時期肥印,不開空調(diào)而能端坐屋內(nèi)者鮮有其人识椰。就是在這樣一個汗流浹背、...
    壹phone壹世界閱讀 266評論 0 0
  • 愿你獲得愛情深碱,同時享受孤獨 愿你喜歡星象腹鹉,水和男人 愿你如星辰般永恒,螞蟻般果決敷硅,宗教般思辨 愿你信仰預言功咒,逝者的...
    棋子與燈花閱讀 232評論 0 0