一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

web前端 javascript 練習(xí)題:觀察者模式和單例模式

 千鋒H5資料庫 2019-12-02


觀察者模式案例

觀察者模式(發(fā)布-訂閱模式):其定義對(duì)象間一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都將得到通知

var observer = {

   regist:function(eventName,callback){

      if(!this.obj){

         this.obj = {};

      }

      if(!this.obj[eventName]){

         this.obj[eventName] = [callback];

      }else{

         this.obj[eventName].push(callback);

      }

   },

   emit:function(eventName){

      for(var i = 0; i < this.obj[eventName].length; i++){

         this.obj[eventName][i]();

      // this.obj[eventName][i](arguments[n]); 有參數(shù)的

      }

   },

   remove:function(eventName,callback){

      for(var i = 0; i < this.obj[eventName].length; i++){

         if(this.obj[eventName][i] == callback){

            this.obj[eventName].splice(i,1);

         }

      }

   }}

//給三個(gè)模塊注冊(cè)事件

observer.regist("loginSuccess",function(){

   console.log("用戶信息模塊接收到了登錄成功的消息,做出了響應(yīng)");})

observer.regist("loginSuccess",function(){

   console.log("購物車模塊接收到了登錄成功的消息,做出了響應(yīng)");})

observer.regist("loginSuccess",function(){

   console.log("消息模塊接收到了登錄成功的消息,做出了響應(yīng)");})

observer.emit("loginSuccess");  //廣播

單例模式

顧名思義,單例就是單一的意思,單例模式的定義是:保證一個(gè)類僅有一個(gè)一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。

新建對(duì)象時(shí)判斷全局是否有該對(duì)象,如果有,就返回該對(duì)象,沒有就創(chuàng)建一個(gè)新對(duì)象返回。

js

1. 簡(jiǎn)單實(shí)現(xiàn)

var Single = (function() {

    var instance = null;

    function Single(name) {

        this.name = name;

    }

    return function(name){

        if (!instance) {

            instance = new Single(name);

        }

        return instance;

    };

})();var oA = new Single('hi');var oB = new Single('hello');console.log(oA===oB);

解析:在第一次調(diào)用構(gòu)造函數(shù)時(shí)利用閉包存儲(chǔ)一個(gè)instance實(shí)例,以后的調(diào)用直接返回instance.

當(dāng)然了,現(xiàn)在都9012年了,ES6 來一波玩玩

class Singleton {

    constructor(name) {

        this.name = name;

        this.instance = null;

    }

    static getInstance(name) {

        if(!this.instance) {

            this.instance = new Singleton(name);

        }

        return this.instance;

    }

}var oA = Singleton.getInstance('hi');var oB = Singleton.getInstance('hisd');console.log(oA===oB);

static 關(guān)鍵字解釋:類相當(dāng)于實(shí)例的原型, 所有在類中定義的方法, 都會(huì)被實(shí)例繼承。 如果在一個(gè)方法前, 加上static關(guān)鍵字, 就表示該方法不會(huì)被實(shí)例繼承, 而是直接通過類來調(diào)用, 這就稱為“ 靜態(tài)方法”。

單例模式的應(yīng)用: 全局中只需要一個(gè)公用的實(shí)例對(duì)象,比如登錄彈窗組件。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本一区二区三区久久娇喘| 日本国产欧美精品视频| 九九热这里只有免费精品| 日本久久中文字幕免费| 日本黄色美女日本黄色| 中文字幕久热精品视频在线| 黄色国产一区二区三区| 成在线人免费视频一区二区| 99久久精品免费精品国产| 日本中文字幕在线精品| 91熟女大屁股偷偷对白| 久久综合亚洲精品蜜桃| 亚洲中文字幕熟女丝袜久久| 国产午夜福利在线观看精品| 午夜激情视频一区二区| 成人免费视频免费观看| 亚洲一区二区精品免费视频| 中文字幕不卡欧美在线| 国产精品午夜一区二区三区| 国产又黄又猛又粗又爽的片| 激情内射日本一区二区三区| 高清一区二区三区大伊香蕉 | 日本一区二区三区黄色| 国产欧美日韩一级小黄片| 99热在线精品视频观看| 在线观看国产午夜福利| 国产一区二区三区丝袜不卡| 亚洲欧美日韩熟女第一页| 久热这里只有精品九九| 蜜臀人妻一区二区三区| 国产国产精品精品在线| 日韩女优视频国产一区| 中文字幕在线区中文色 | 日本不卡在线视频你懂的| 欧美一级特黄大片做受大屁股| 中文人妻精品一区二区三区四区 | 自拍偷拍福利视频在线观看| 久久精品亚洲精品一区| 国产午夜福利在线观看精品| 国产精品午夜视频免费观看| 亚洲最新中文字幕在线视频|