es6 发布-订阅模式

class Event {
    constructor() {
        //保存事件列表
        this.eventList = [];
    }
    on(key,fn){
        if ( !this.eventList[ key ] ){ 
            this.eventList[ key ] = []; 
        } 
        this.eventList[ key ].push( fn );
    }
    trigger(){
        var key = Array.prototype.shift.call( arguments ),
            fns = this.eventList[ key ]; 
        if ( !fns || fns.length === 0 ){
            return false; 
        } 
        for( var i = 0, fn; fn = fns[ i++ ]; ){ 
            fn.apply( this, arguments );
        } 
    }
}

//继承
class Test extends Event {
    constructor() {
        super();
        this.init();
    }
    init(){
        window.setTimeout(()=>{
            this.trigger('test','word:123','key:test');
        },3000);
    }
}

let t = new Test();

t.on('test',(word,key)=>{
    alert(word);
    alert(key);
});

//重复注册
t.on('test',(word,key)=>{
    alert(key);
    alert(word);
});

 

转载于:https://www.cnblogs.com/longor/p/7562709.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值