欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

觀察者設(shè)計模式

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

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

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

   let obj = {
            name: "若水"
        }

被觀察者

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

 // 被觀察者類
        class Subject {
        //未傳值初始為空
            constructor(state = "") {
                // 初始狀態(tài)
                this.state = state
                // 觀察者方法隊列 
                this.observsers = []
            }
            // 設(shè)置自己的狀態(tài)
            setState(val) {
            // 告訴觀察者目前改變成了什么狀態(tài)
                this.state = val;
                // 同時需要把自己身上的觀察者方法全部觸發(fā)
                this.observsers.map(item => {
                    // item是每一個觀察者,每一個觀察者是一個對象
                    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í)行觀察者的方法,觀察者有一個屬性是表示自己的身份,一個是自己方法,用于被觀察者觸發(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)建一個被觀察者
????????const?name?=?new?Subject(obj.name)
        //?添加一個觀察者
????????name.addObserver(ObserverName)
        //觸發(fā)觀察者方法
        name.setState('前端若水')

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

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

相關(guān)文章

  • js控制一個按鈕是否可點擊(可使用)disabled的實例

    js控制一個按鈕是否可點擊(可使用)disabled的實例

    下面小編就為大家?guī)硪黄猨s控制一個按鈕是否可點擊(可使用)disabled的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • JS實現(xiàn)用戶注冊界面功能

    JS實現(xiàn)用戶注冊界面功能

    這篇文章主要為大家詳細(xì)介紹了JS實現(xiàn)用戶注冊界面功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • JavaScript 條件判斷與比較運算示例代碼

    JavaScript 條件判斷與比較運算示例代碼

    這篇文章主要介紹了JavaScript 條件判斷與比較運算,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • layer彈出層自定義提交取消按鈕的例子

    layer彈出層自定義提交取消按鈕的例子

    今天小編就為大家分享一篇layer彈出層自定義提交取消按鈕的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • js 判斷上傳文件大小及格式代碼

    js 判斷上傳文件大小及格式代碼

    用js對上傳的文件大小以及格式進(jìn)行初步的判斷,在服務(wù)端再進(jìn)行一次判斷(防止瀏覽器拒絕執(zhí)行腳本文件)下面有個不錯的方法大家可以參考下
    2013-11-11
  • JavaScript實現(xiàn)相冊彈窗功能(zepto.js)

    JavaScript實現(xiàn)相冊彈窗功能(zepto.js)

    這篇文章主要介紹了JavaScript基于zepto.js實現(xiàn)相冊彈窗功能的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • JavaScript Reduce使用詳解

    JavaScript Reduce使用詳解

    這篇文章主要介紹了JavaScript Reduce使用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用JavaScript,感興趣的朋友可以了解下
    2021-03-03
  • JS回調(diào)函數(shù)的應(yīng)用簡單實例

    JS回調(diào)函數(shù)的應(yīng)用簡單實例

    這篇文章主要分享了JS回調(diào)函數(shù)應(yīng)用的簡單實例,比較實用,需要的朋友可以參考下
    2014-09-09
  • 微信小程序登錄態(tài)和檢驗注冊過沒的app.js寫法

    微信小程序登錄態(tài)和檢驗注冊過沒的app.js寫法

    這篇文章主要介紹了小程序登錄態(tài)和檢驗注冊過沒的app.js寫法, 本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 移動端H5喚起APP的寫法實例(IOS、android)

    移動端H5喚起APP的寫法實例(IOS、android)

    最近在做掃碼之后的h5頁面喚醒App的功能,所以記錄一下,這篇文章主要給大家介紹了關(guān)于移動端H5喚起APP的相關(guān)資料,需要的朋友可以參考下
    2021-07-07

最新評論