javascript 裝飾者模式

裝飾者模式:給對(duì)象動(dòng)態(tài)添加職責(zé)的方式就是裝飾者模式采记,能夠在不改變?cè)瓕?duì)象的情況下套才,在運(yùn)行的時(shí)候給對(duì)象添加新的職責(zé)乎完。
參考《javascript設(shè)計(jì)模式與開發(fā)實(shí)踐》

裝飾函數(shù)

如果在給一個(gè)函數(shù)或?qū)ο筇砑庸δ艿臅r(shí)候不想動(dòng)原函數(shù)掰读,或者原函數(shù)是別的程序員寫的松逊,這時(shí)候可以通過引用來增加函數(shù)功能

  var a=function(){ //構(gòu)造函數(shù)
    alert(1);
 };

var _a=a; //_a作為中間變量

a=function(){  //重新賦值a變量
   _a();  //執(zhí)行a函數(shù)
   alert(2); //添加的功能
}

下面重點(diǎn)是介紹一個(gè)AOP的例子躺屁,AOP是面向切面編程,在下面的函數(shù)運(yùn)行的時(shí)候经宏,可以給把函數(shù)看做有一個(gè)生命周期犀暑,分為 運(yùn)行前(before),運(yùn)行中烁兰,運(yùn)行后(after)耐亏。在運(yùn)行前,運(yùn)行后可以給函數(shù)對(duì)象添加不同的職責(zé)沪斟,這些添加的職責(zé)不會(huì)影響原函數(shù)對(duì)象的運(yùn)行广辰。

在javascript中幾乎一切都是對(duì)象,函數(shù)作為一等對(duì)象主之,可以作為函數(shù)的參數(shù)傳遞轨域,所以在js中使用裝飾者模式的時(shí)候后很大的便利性。

AOP的標(biāo)準(zhǔn)模型

//argument對(duì)象是函數(shù)調(diào)用時(shí)杀餐,隱式傳遞的函數(shù)參數(shù)
Function.prototype.before = function( beforefn ){
        var __self = this; // 保存原函數(shù)的引用
        return function(){ // 返回包含了原函數(shù)和新函數(shù)的"代理"函數(shù)
            beforefn.apply( this, arguments ); // 執(zhí)行新函數(shù)干发,且保證this
// 不被劫持,新函數(shù)接受的參數(shù)也會(huì)被原封不動(dòng)地傳入原函數(shù)史翘,新函數(shù)在原函數(shù)之前執(zhí)行
            return __self.apply( this, arguments ); // 執(zhí)行原函數(shù)并返
//回原函數(shù)的執(zhí)行結(jié)果枉长, 并且保證this 不被劫持      
    }
}

Function.prototype.after = function( afterfn ){
    var __self = this;
    return function(){
        var ret = __self.apply( this, arguments );
        afterfn.apply( this, arguments );
        return ret;
    }
}; 

實(shí)例:點(diǎn)擊按鈕時(shí)彈框之后統(tǒng)計(jì)彈框的參數(shù)

//log函數(shù)作為參數(shù)傳遞  
Function.prototype.after = function( afterfn ){
        var __self = this; //保存原函數(shù)的引用冀续,_在js中是可以使用的可以作為一個(gè)私有方法和變量的起始標(biāo)志
        return function(){ //返回函數(shù)復(fù)合體
            var ret = __self.apply( this, arguments );//原函數(shù)調(diào)用
            afterfn.apply( this, arguments );//after函數(shù)調(diào)用
            return ret; //返回原函數(shù)
        }
    };
    var showLogin = function(){
        console.log( '打開登錄浮層' );
    }
    var log = function(){
        console.log( '上報(bào)標(biāo)簽為: ' + this.getAttribute( 'tag' ) );
    }

    showLogin = showLogin.after( log ); // 打開登錄浮層之后上報(bào)數(shù)據(jù)
    document.getElementById( 'button' ).onclick = showLogin;
    
    ```

在javascript中。面向?qū)ο缶幊毯秃瘮?shù)式編程是不矛盾的必峰。兩者結(jié)合起來威力更大洪唐。隨著學(xué)習(xí)的深入,你會(huì)覺得滿滿的都是套路和模式吼蚁。到了這一步學(xué)習(xí)有點(diǎn)欲罷不能了凭需。學(xué)習(xí)javascript真是有意思。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肝匆,一起剝皮案震驚了整個(gè)濱河市粒蜈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旗国,老刑警劉巖枯怖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異能曾,居然都是意外死亡度硝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門寿冕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蕊程,“玉大人,你說我怎么就攤上這事驼唱〈孓啵” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵曙蒸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我岗钩,道長(zhǎng)纽窟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任兼吓,我火速辦了婚禮臂港,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘视搏。我一直安慰自己审孽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布浑娜。 她就那樣靜靜地躺著佑力,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筋遭。 梳的紋絲不亂的頭發(fā)上打颤,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天暴拄,我揣著相機(jī)與錄音,去河邊找鬼编饺。 笑死乖篷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的透且。 我是一名探鬼主播撕蔼,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼秽誊!你這毒婦竟也來了鲸沮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤养距,失蹤者是張志新(化名)和其女友劉穎诉探,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棍厌,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肾胯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耘纱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敬肚。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖束析,靈堂內(nèi)的尸體忽然破棺而出艳馒,到底是詐尸還是另有隱情,我是刑警寧澤员寇,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布弄慰,位于F島的核電站,受9級(jí)特大地震影響蝶锋,放射性物質(zhì)發(fā)生泄漏陆爽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一扳缕、第九天 我趴在偏房一處隱蔽的房頂上張望慌闭。 院中可真熱鬧,春花似錦躯舔、人聲如沸驴剔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丧失。三九已至,卻和暖如春惜互,著一層夾襖步出監(jiān)牢的瞬間利花,已是汗流浹背科侈。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炒事,地道東北人臀栈。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像挠乳,于是被迫代替她去往敵國(guó)和親权薯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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