最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript設(shè)計(jì)模式中的觀察者模式

 更新時(shí)間:2022年06月23日 15:39:46   作者:??前端若水????  
這篇文章主要介紹了JavaScript設(shè)計(jì)模式中的觀察者模式,觀察者設(shè)計(jì)模式適用于監(jiān)聽一對(duì)多的操作,例如監(jiān)聽對(duì)象屬性的修改等等,觀察者模式能夠降低代碼耦合度,提升可擴(kuò)展性

觀察者設(shè)計(jì)模式

觀察者設(shè)計(jì)模式中分為被觀察者和觀察者,當(dāng)被觀察者觸發(fā)了某個(gè)邊界條件,觀察者就會(huì)觸發(fā)事件,這里需要倆個(gè)構(gòu)造函數(shù)進(jìn)行觀察者設(shè)計(jì)模式一個(gè)是被觀察者一個(gè)是觀察者

我們來利用觀察者監(jiān)聽對(duì)象某個(gè)屬性的修改操作,對(duì)象某個(gè)屬性的修改會(huì)觸發(fā)觀察者的某些方法

初始數(shù)據(jù)

   let obj = {
            name: "若水"
        }

被觀察者

創(chuàng)建被觀察者,我們給被觀察者定義一個(gè)初始化狀態(tài),用于記錄觀察屬性的初始值,還需定義一個(gè)觀察者方法隊(duì)列,用于對(duì)觀察者的增刪操作且還用于觸發(fā)觀察者身上的方法,被觀察者類身上還有三個(gè)方法,修改被觀察者屬性方法,修改被觀察者屬性方法一是用于修改被觀察者值,二是用于觸發(fā)自身上的觀察者方法,添加觀察者方法,用于給自身上添加觀察者,刪除觀察者方法,用于刪除自身上的觀察者

 // 被觀察者類
        class Subject {
        //未傳值初始為空
            constructor(state = "") {
                // 初始狀態(tài)
                this.state = state
                // 觀察者方法隊(duì)列 
                this.observsers = []
            }
            // 設(shè)置自己的狀態(tài)
            setState(val) {
            // 告訴觀察者目前改變成了什么狀態(tài)
                this.state = val;
                // 同時(shí)需要把自己身上的觀察者方法全部觸發(fā)
                this.observsers.map(item => {
                    // item是每一個(gè)觀察者,每一個(gè)觀察者是一個(gè)對(duì)象
                    item.callback(this.state);
                })
            }
            // 添加觀察者
            addObserver(observer) {
                // 把觀察者傳遞進(jìn)來
                this.observsers.push(observer)
            }
            // 刪除觀察者
            removeObserver(observer) {
                // 過濾出來非當(dāng)前觀察者的觀察者
                this.observsers = this.observsers.filter(obs => obs !== observer);
            }
        }

觀察者

創(chuàng)建觀察者,用于定義觀察者的身份以及執(zhí)行觀察者的方法,觀察者有一個(gè)屬性是表示自己的身份,一個(gè)是自己方法,用于被觀察者觸發(fā)使用

    // 觀察者類
        class Observer {
            // name需要觀察的參數(shù) 
            // callback 觀察的參數(shù)達(dá)到邊界條件觸發(fā)的事件
            constructor(name, callback = () => { }) {
                this.name = name;
                this.callback = callback;
            }
        }

最后我們來使用一下:

     // 創(chuàng)建觀察者
        const ObserverName = new Observer('監(jiān)聽obj改變', () => { console.log('obj發(fā)生改變'); })
        //?創(chuàng)建一個(gè)被觀察者
????????const?name?=?new?Subject(obj.name)
        //?添加一個(gè)觀察者
????????name.addObserver(ObserverName)
        //觸發(fā)觀察者方法
        name.setState('前端若水')

觀察者設(shè)計(jì)模式適用于監(jiān)聽一對(duì)多的操作,例如監(jiān)聽對(duì)象屬性的修改等等,觀察者模式能夠降低代碼耦合度,提升可擴(kuò)展性,但是被觀察者擁有過多的觀察者進(jìn)行監(jiān)聽會(huì)提高運(yùn)行時(shí)間以及程序的復(fù)雜程度

到此這篇關(guān)于JavaScript設(shè)計(jì)模式中的觀察者模式的文章就介紹到這了,更多相關(guān)JavaScript 觀察者模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • TypeScript開發(fā)小狀況記錄之選且只選一個(gè)

    TypeScript開發(fā)小狀況記錄之選且只選一個(gè)

    在開發(fā)中需要定義一個(gè)對(duì)象的類型,此類型必須包含某n個(gè)字段中的其中一種,這篇文章主要給大家介紹了關(guān)于TypeScript開發(fā)小狀況記錄之選且只選一個(gè)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 淺談JS中String()與 .toString()的區(qū)別

    淺談JS中String()與 .toString()的區(qū)別

    下面小編就為大家?guī)硪黄獪\談JS中String()與 .toString()的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • javascript學(xué)習(xí)之json入門

    javascript學(xué)習(xí)之json入門

    本文主要對(duì)javascript中的JSON進(jìn)行詳細(xì)介紹。相信對(duì)于初學(xué)者具有很好的參考價(jià)值,下面就跟著小編一起來看下吧
    2016-12-12
  • JavaScript中防止微信瀏覽器被整體拖動(dòng)的方法

    JavaScript中防止微信瀏覽器被整體拖動(dòng)的方法

    這篇文章主要介紹了JavaScript中防止微信瀏覽器被整體拖動(dòng)的方法,需要的朋友可以參考下
    2017-08-08
  • JavaScript自執(zhí)行閉包的小例子

    JavaScript自執(zhí)行閉包的小例子

    JQuery是一個(gè)很明顯的自執(zhí)行閉包的例子,有需要的朋友可以參考一下
    2013-06-06
  • 動(dòng)態(tài)規(guī)劃之使用備忘錄來改進(jìn)Javascript函數(shù)

    動(dòng)態(tài)規(guī)劃之使用備忘錄來改進(jìn)Javascript函數(shù)

    這篇文章主要介紹了動(dòng)態(tài)規(guī)劃之使用備忘錄來改進(jìn)Javascript函數(shù),動(dòng)態(tài)規(guī)劃它既是一種數(shù)學(xué)優(yōu)化方法,也是一種計(jì)算機(jī)編程方法,下文相關(guān)資料介紹需要的小伙伴可以參考一下
    2022-04-04
  • Microsoft Ajax Minifier 壓縮javascript的方法

    Microsoft Ajax Minifier 壓縮javascript的方法

    使用Microsoft AJAX 庫(kù) (第六個(gè)預(yù)覽版) 其中有一個(gè) ajaxmin.exe 可以壓縮Js文件可以在dos 命令下 /? 查看其參數(shù)說明。
    2010-03-03
  • js實(shí)現(xiàn)隨機(jī)圓與矩形功能

    js實(shí)現(xiàn)隨機(jī)圓與矩形功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)隨機(jī)圓與矩形功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • JavaScript模板引擎EJS特性及用法詳解

    JavaScript模板引擎EJS特性及用法詳解

    EJS是一種簡(jiǎn)單而靈活的模板引擎,用于將數(shù)據(jù)動(dòng)態(tài)渲染到網(wǎng)頁(yè)上,本文將從介紹EJS的背景和起源開始,詳細(xì)介紹EJS的特性和使用方法,包括安裝配置、基本語(yǔ)法和標(biāo)簽、數(shù)據(jù)綁定和邏輯控制、模板的繼承和包含等方面,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-06-06
  • javascript實(shí)現(xiàn)根據(jù)時(shí)間段顯示問候語(yǔ)的方法

    javascript實(shí)現(xiàn)根據(jù)時(shí)間段顯示問候語(yǔ)的方法

    這篇文章主要介紹了javascript實(shí)現(xiàn)根據(jù)時(shí)間段顯示問候語(yǔ)的方法,涉及javascript時(shí)間與字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

鄱阳县| 沙河市| 宽城| 雷山县| 闸北区| 周至县| 涡阳县| 新龙县| 噶尔县| 本溪| 察雅县| 乐都县| 建昌县| 磐安县| 井冈山市| 达拉特旗| 宣城市| 和龙市| 阿拉善右旗| 江陵县| 吉安市| 金乡县| 驻马店市| 巨野县| 余干县| 岗巴县| 连城县| 上虞市| 蓬安县| 襄城县| 嫩江县| 昔阳县| 仲巴县| 隆尧县| 桐梓县| 尤溪县| 辽阳县| 盈江县| 舟山市| 星子县| 十堰市|