首页 > 编程语言 > 详细

JavaScript设计模式—— 发布订阅模式

时间:2021-07-11 17:34:07      阅读:28      评论:0      收藏:0      [点我收藏+]

ES5

var Event = {
    ClientListen : [],
    listen : function(key,fn) {
        if(!this.ClientListen[key]) {
            this.ClientListen[key] = []
        }
        this.ClientListen[key].push(fn)
    },
    trigger : function() {
        var key = Array.prototype.shift.call(arguments),
            fns = this.ClientListen[key]
        for(var i=0; i<fns.length; i++) {
            fns[i].apply(this, arguments)
        }
    }
}

function installEvent(target, source) {
    for(var i in source) {
        target[i] = source[i]
    }

    return target
}

var Obj = installEvent(Obj,Event)

Obj.listen("sq888",function(price, sq) {
    console.log(price, sq)
})
Obj.listen("sq888",function(price, sq) {
    console.log(price, sq)
})
Obj.listen("sq998",function(price, sq) {
    console.log(price, sq)
})
Obj.listen("sq998",function(price, sq) {
    console.log(price, sq)
})

Obj.trigger("sq888",1000,‘88‘)

 ES6

class Event {
    constructor(){
        this.ClientListen = []
    }
    listen(key,fn) {
        if(!this.ClientListen[key]) {
            this.ClientListen[key] = []
        }
        this.ClientListen[key].push(fn)
    }
    trigger() {
        var key = Array.prototype.shift.call(arguments),
            fns = this.ClientListen[key]
        for(var i=0; i<fns.length; i++) {
            fns[i].apply(this, arguments)
        }
    }
}

class Obj extends Event {
    constructor(){
        super()
    }
}

var obj = new Obj()

obj.listen("sq888",function(price, sq) {
    console.log(price, sq)
})
obj.listen("sq888",function(price, sq) {
    console.log(price, sq)
})
obj.listen("sq998",function(price, sq) {
    console.log(price, sq)
})
obj.listen("sq998",function(price, sq) {
    console.log(price, sq)
})

obj.trigger("sq888",1000,‘88‘)

 

JavaScript设计模式—— 发布订阅模式

原文:https://www.cnblogs.com/czx7020866/p/14998540.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!