亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

javascript設(shè)計(jì)模式 --- 裝飾者模式

kumfo / 2033人閱讀

摘要:設(shè)計(jì)模式裝飾者模式何為裝飾者,意思就是,在不影響對(duì)象主功能的情況下,再添加一些額外的功能,使對(duì)象具備更多的功能。與繼承相比,裝飾者是一種更靈活輕便的做法。

javascript設(shè)計(jì)模式 --- 裝飾者模式

何為裝飾者,意思就是,在不影響對(duì)象主功能的情況下,再添加一些額外的功能,使對(duì)象具備更多的功能。與繼承相比,裝飾者是一種更靈活輕便的做法。下面我們看看javascript里裝飾者模式

1.模擬傳統(tǒng)面向?qū)ο笳Z言的裝飾者模式
裝飾者模式將一個(gè)對(duì)象嵌入到另一個(gè)對(duì)象之中,實(shí)際上相當(dāng)于這個(gè)對(duì)象被另一個(gè)對(duì)像包裝起來,形成一條包裝鏈。請(qǐng)求隨著這條包裝鏈依次傳遞到所有的對(duì)象,每個(gè)對(duì)象都有處理這條請(qǐng)求的機(jī)會(huì)。
var Plan1 = {
    fire: function () {
      console.log("發(fā)射普通的子彈")
    }
  }
  var missileDecorator = function () {
    console.log("發(fā)射導(dǎo)彈!");
  }
  var fire = Plan1.fire
  Plan1.fire = function () {
    fire()
    missileDecorator()
  };
  Plan1.fire()
裝飾函數(shù), 很多時(shí)候我們?cè)谛薷膭e人的代碼時(shí),會(huì)改動(dòng)window.onload里的東西,但是直接修改別人的代碼太多,容易出錯(cuò),所以我們可以用下面這個(gè)方式來修改
    // 別人的代碼
    window.onload = function () {
        console.log("別人的代碼")
    }
 var _onload = window.onload || function() {}
    window.onload = function(){
        _onload()
        console.log("自己的代碼")
    }

通過以上方式,我們可以很輕松的在onload的函數(shù)里插入自己的方法,而不會(huì)影響別人的方法

面向切面的AOP編程,因?yàn)楹瘮?shù)在js里是一等對(duì)象,所以,我們可以給函數(shù)原型添加我們需要執(zhí)行的方法
Function.prototype.before = function (fn) {
        var self = this // 原函數(shù)
        return function () {  // 返回一個(gè)新函數(shù),該函數(shù)先執(zhí)行fn函數(shù),再執(zhí)行原函數(shù)
            fn.apply(this, arguments)  // fn函數(shù)
            return self.apply(this, arguments)  // 原函數(shù)
        }
    }
    var f1 = function () {
        console.log(2)
    }
    var f1 = f1.before(function () {
        console.log(1)
    })
    f1()  // 1   2
仔細(xì)觀察上面的方法,我們可以看到,fn函數(shù)和原函數(shù)使用的都是一個(gè)arguments,所以,我們可以在fn函數(shù)里修改arguments,使原函數(shù)直接使用修改過的arguments,例如
    var obj = {
        a: "a"
    }

    var f1 = function (params) {
        console.log(params)
    }
    var f1 = f1.before(function (params) {
        params.b = "b"  // 給obj添加b屬性
    })
    f1(obj)  // {a: "a", b: "b"}
我們添加了一個(gè)obj,可以看到,before里,給obj添加了一個(gè)b屬性,因?yàn)閎efore里的fn和f1用的是同一個(gè)參數(shù)
總結(jié)

裝飾者模式的作用就是為了在不影響原對(duì)象功能的情況下,動(dòng)態(tài)的加入某些行為,從而使對(duì)象方法更靈活多變,易于維護(hù)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/94071.html

相關(guān)文章

  • JavaScript設(shè)計(jì)模式----裝飾模式

    摘要:聲明這個(gè)系列為閱讀設(shè)計(jì)模式與開發(fā)實(shí)踐曾探著一書的讀書筆記裝飾者模式的定義裝飾者模式能夠在不改變對(duì)象自身的基礎(chǔ)上,在程序運(yùn)行期間給對(duì)像動(dòng)態(tài)的添加職責(zé)。與繼承相比,裝飾者是一種更輕便靈活的做法。裝飾者模式的作用就是為對(duì)象動(dòng)態(tài)的加入某些行為。 聲明:這個(gè)系列為閱讀《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》 ----曾探@著一書的讀書筆記 裝飾者模式的定義: 裝飾者(decorator)模式能...

    rose 評(píng)論0 收藏0
  • 5 分鐘即可掌握的 JavaScript 裝飾模式與 AOP

    摘要:下裝飾者的實(shí)現(xiàn)了解了裝飾者模式和的概念之后,我們寫一段能夠兼容的代碼來實(shí)現(xiàn)裝飾者模式原函數(shù)拍照片定義函數(shù)裝飾函數(shù)加濾鏡用裝飾函數(shù)裝飾原函數(shù)這樣我們就實(shí)現(xiàn)了抽離拍照與濾鏡邏輯,如果以后需要自動(dòng)上傳功能,也可以通過函數(shù)來添加。 showImg(https://segmentfault.com/img/bVbueyz?w=852&h=356); 什么是裝飾者模式 當(dāng)我們拍了一張照片準(zhǔn)備發(fā)朋友...

    chunquedong 評(píng)論0 收藏0
  • javascript設(shè)計(jì)模式--裝飾模式

    摘要:裝飾者模式定義裝飾者模式能夠在不改變對(duì)象自身的基礎(chǔ)上,在程序運(yùn)行期間給對(duì)像動(dòng)態(tài)的添加職責(zé)。與繼承相比,裝飾者是一種更輕便靈活的做法。 裝飾者模式 定義 : 裝飾者(decorator)模式能夠在不改變對(duì)象自身的基礎(chǔ)上,在程序運(yùn)行期間給對(duì)像動(dòng)態(tài)的添加職責(zé)。與繼承相比,裝飾者是一種更輕便靈活的做法。 在不改變對(duì)象自身的基礎(chǔ)上,在程序運(yùn)行期間給對(duì)象動(dòng)態(tài)地添加一些額外職責(zé) 特點(diǎn) : 可以動(dòng)態(tài)的...

    haoguo 評(píng)論0 收藏0
  • JavaScript設(shè)計(jì)模式七:裝飾模式

    摘要:裝飾者模式裝飾者模式提供比繼承更有彈性的替代方案。裝飾者用于包裝同接口的對(duì)象,用于通過重載方法的形式添加新功能,該模式可以在被裝飾者的前面或后面加上自己的行為以達(dá)到特定的目的。簡(jiǎn)單的理解給對(duì)象動(dòng)態(tài)添加職責(zé)的方式稱為裝飾著模式。 裝飾者模式 裝飾者模式提供比繼承更有彈性的替代方案。裝飾者用于包裝同接口的對(duì)象,用于通過重載方法的形式添加新功能,該模式可以在被裝飾者的前面或后面加上自己的行為...

    alexnevsky 評(píng)論0 收藏0
  • JavaScript 模式》知識(shí)點(diǎn)小抄本(上)

    摘要:?jiǎn)误w模式有以下優(yōu)點(diǎn)用來劃分命名空間,減少全局變量數(shù)量。通常我們使用操作符創(chuàng)建單體模式的三種選擇,讓構(gòu)造函數(shù)總返回最初的對(duì)象使用全局對(duì)象來存儲(chǔ)該實(shí)例不推薦,容易全局污染。實(shí)現(xiàn)該工廠模式并不困難,主要是要找到能夠穿件所需類型對(duì)象的構(gòu)造函數(shù)。 介紹 最近開始給自己每周訂個(gè)學(xué)習(xí)任務(wù),學(xué)習(xí)結(jié)果反饋為一篇文章的輸出,做好學(xué)習(xí)記錄。 這一周(02.25-03.03)我定的目標(biāo)是《JavaScri...

    didikee 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<