zoukankan      html  css  js  c++  java
  • 订阅发布模式

    继承了事件类的对象既是事件注册者,也是事件发布者。对象被收回时,其监听的事情也会被释放,除非该事件中存在其他指向全局的引用,这种情况必须手动移除监听。

    var salesOffices = {}; // 定义售楼处
    salesOffices.clientList = []; // 缓存列表,存放订阅者的回调函数
    
    salesOffices.listen = function( key, fn ){
        if ( !this.clientList[ key ] ){ // 如果还没有订阅过此类消息,给该类消息创建一个缓存列表
            this.clientList[ key ] = [];
        }
        this.clientList[ key ].push( fn ); // 订阅的消息添加进消息缓存列表
    };
    
    salesOffices.trigger = function(){ // 发布消息
        var key = Array.prototype.shift.call( arguments ), // 取出消息类型
        fns = this.clientList[ key ]; // 取出该消息对应的回调函数集合
        if ( !fns || fns.length === 0 ){ // 如果没有订阅该消息,则返回
            return false;
        }
        for( var i = 0, fn; fn = fns[ i++ ]; ){
            fn.apply( this, arguments ); // (2) // arguments 是发布消息时附送的参数
        }
    };
    
    salesOffices.listen( 'squareMeter88', function( price ){ // 小明订阅88 平方米房子的消息
        console.log( '价格= ' + price ); // 输出: 2000000
    });
    
    salesOffices.listen( 'squareMeter110', function( price ){ // 小红订阅110 平方米房子的消息
        console.log( '价格= ' + price ); // 输出: 3000000
    });
    
    salesOffices.trigger( 'squareMeter88', 2000000 ); // 发布88 平方米房子的价格
    salesOffices.trigger( 'squareMeter110', 3000000 ); // 发布110 平方米房子的价格
  • 相关阅读:
    Eclipse 开发过程中利用 JavaRebel 提高效率
    数字转化为大写中文
    网页变灰
    解决QQ截图无法在PS中粘贴
    ORACLE操作表时”资源正忙,需指定nowait"的解锁方法
    网页常用代码
    SQL Server 2000 删除注册的服务器
    GridView 显示序号
    读取Excel数据到DataTable
    清除SVN版本控制
  • 原文地址:https://www.cnblogs.com/jacksplwxy/p/9542280.html
Copyright © 2011-2022 走看看