js 发布/订阅模式

直接上代码

js代码test.js

var xEvent=(function(){
    function xEvent(){
        this._events={};
    }
    xEvent.prototype={
        emit:function(name,obj){
            if(name in this._events){
                for(var i=0;i<this._events[name].length;i++){
                    this._events[name][i](obj);
                }           
            }
        },
        on:function(name,callback){
            if(!(name in this._events)){
                this._events[name]=[];
            }
            this._events[name].push(callback);
        },
        remove:function(name,callback){
            this._events[name]?this._events[name].splice(this._events[name].indexOf(callback), 1) : void 0;
        },
        removeAll:function(name){
            this._events[name]=[]
        }
    }
    return xEvent;
})();

测试代码test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>js发布/订阅模式</title>
</head>
<body>
    <script src="./test.js">
    </script>
    <script>
        var event=new xEvent();
        var test0=function(res){
            console.info('test0-----监听',res);
        };

        var test1=function(res){
            console.info('test1-----监听',res);
        };

        console.info('test0--------------------------start');
        event.on('test0',test0);

        event.emit('test0',{
            code:0,
            msg:'test0---0',
            data:null
        });

        console.info('test1-------------------移除监听测试');
        event.on('test1',test1);
        event.remove('test1');                              
        event.emit('test1',{
            code:1,
            msg:'test1---1',
            data:null
        });
    </script>
</body>
</html>

测试结果

test0--------------------------start
test.html:15 test0-----监听 {code: 0, msg: "test0---0", data: null}
test.html:31 test1-------------------移除监听测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值