zoukankan      html  css  js  c++  java
  • 简单实现一个观察者模式

    function Observer(){this.fns = []}

    Observer.prototype = {

      subscribe:function(fn){

         this.fns.push(fn)

      },

      unsubscribe:function(fn){

         this.fns = this.fns.filter((cb)=>{if(cb != fn){return true}})

      },

      update:function(o,thisobj){

        let scope = thisobj || window

        this.fns.forEach((val)=>{

           val.call(scope,o)

        })

      }

    }

    //以下为举的简单例子

    let o = new Observer()

    let f1 = function(data){

       console.info(`li:${data}`)

    }

    let f2 = function(data){

       console.info(`wang:${data}`)

    }

    let f3 = function(data){

       console.info(`williem:${data}`)

    }

    o.subscribe(f1)

    o.subscribe(f2)

    o.subscribe(f3)

    o.update("tom回来了")

    /*输出示例*/

    li:tom回来了

    wang:tom回来了

    williem:tom回来了

    o.unsubscribe(f1)

    /*输出示例*/

    wang:tom回来了

    williem:tom回来了

  • 相关阅读:
    cookie行为试验(一)
    指针内容的引用
    多线程协同
    xss攻击
    _com_error e
    操作符重载
    c++对象中的成员变量地址分布
    常对象指针
    COM调用2
    cookie行为试验(二)
  • 原文地址:https://www.cnblogs.com/wangc04/p/14263578.html
Copyright © 2011-2022 走看看