javascript设想形式之 宣布定阅形式

var office = {
  fnlist:{},
  listen: function(key,fn){
    if(!this.fnlist[key]){
       this.fnlist[key] = []
    }
    this.fnlist[key].push(fn)
  },
  trigger: function(){
    var key = Array.prototype.shift.call(arguments),
        fnArr = this.fnlist[key];
    if(!fnArr || fnArr.length===0){
       
       return false
    }
    for(var i =0,fn;fn=fnArr[i++];){
         fn.apply(this,arguments)
    }
  }
}

运用

office.listen('a',function(data){console.log(data)})
office.trigger('a',"我就是数据")
//输出 我就是数据

宣布定阅形式的通用完成
修改下之前的代码

var event= {
  fnlist:{},
  listen: function(key,fn){
    if(!this.fnlist[key]){
       this.fnlist[key] = []
    }
    this.fnlist[key].push(fn)
  },
  trigger: function(){
    var key = Array.prototype.shift.call(arguments),
        fnArr = this.fnlist[key];
    if(!fnArr || fnArr.length===0){
       
       return false
    }
    for(var i =0,fn;fn=fnArr[i++];){
         fn.apply(this,arguments)
    }
  }
}

js是一门诠释之行的言语,给对象动态欠佳职责是很简单的事变

我们须要一个installEvent要领

var installEvent = function(obj){
     for(var i in event){
      obj[i] = event[i]
    }
}

须要让一个对象 有 宣布定阅功用
只须要

var a = {}
installEvent(a);
// a 对象就有了结果
    原文作者:最普通的一个
    原文地址: https://segmentfault.com/a/1190000007357192
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞