zoukankan      html  css  js  c++  java
  • 发布订阅模式源码实现

    var shoeObj = {}; // 定义发布者
    shoeObj.list = []; // 缓存列表 存放订阅者回调函数
            
    // 增加订阅者
    shoeObj.listen = function(key,fn) {
        if(!this.list[key]) {
            // 如果还没有订阅过此类消息,给该类消息创建一个缓存列表
            this.list[key] = []; 
        }
        this.list[key].push(fn);  // 订阅消息添加到缓存列表
    }
    
    // 发布消息
    shoeObj.trigger = function(){
        var key = Array.prototype.shift.call(arguments); // 取出消息类型名称
        var fns = this.list[key];  // 取出该消息对应的回调函数的集合
    
        // 如果没有订阅过该消息的话,则返回
        if(!fns || fns.length === 0) {
            return;
        }
        for(var i = 0,fn; fn = fns[i++]; ) {
            fn.apply(this,arguments); // arguments 是发布消息时附送的参数
        }
    };
    
    // 小红订阅如下消息
    shoeObj.listen('red',function(size){
        console.log("尺码是:"+size);  
    });
    
    // 小花订阅如下消息
    shoeObj.listen('block',function(size){
        console.log("再次打印尺码是:"+size); 
    });
    shoeObj.trigger("red",40);
    shoeObj.trigger("block",42);
  • 相关阅读:
    TensorFlow函数(七)tf.argmax()
    Harbor 1.8.0 仓库的安装和使用
    Rust基础笔记:闭包
    docker-compose搭建单机多节点es + kibana
    Filebeat+Logstash+Elasticsearch测试
    filebeat 笔记
    ELK笔记
    manjaro i3 配置笔记
    manjaro 下golang protobuf的使用
    go 算法
  • 原文地址:https://www.cnblogs.com/afterwawa/p/8893229.html
Copyright © 2011-2022 走看看