码迷,mamicode.com
首页 > 其他好文 > 详细

订阅发布者模式简单版 和 高级计数器 哈哈!

时间:2017-08-18 18:27:36      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:set   发布   patch   ack   div   pre   tle   argument   func   

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

    <script>

        // 订阅发布者模式简单版
        function test(){
            var obj = {}
            var on = function(name,callback){
                if(!obj[name]){
                    obj[name] = []
                }
                obj[name].push(callback)
            }
            var emit = function(name){
                if(!obj[name]) return;
                var length = obj[name].length,
                    i = 0,
                    temp = Array.prototype.slice.call(arguments,1)
                for(;i<length;i++){
                    obj[name][i].apply(this,temp)
                }
            }
            return {
                on,
                emit
            }
        }
        var a = test()
        a.on(‘a‘,function(a){
            console.log(a)
        })
        a.on(‘a‘,function(a){
            console.log(a)
            console.log(1)
        })
        a.emit(‘a‘,3)
        // 高级计数器
        var demo = function(l){
            var obj = {}
            var on = function(name,callback){
                if(!obj[name]){
                    obj[name] = {
                        callback:callback,
                        length:l,
                        result:{}
                    }
                }
            }
            var dispatch = function(name,result){
                if(!obj[name]) return;
                var length = --obj[name].length;
                for(var k in result){
                     obj[name].result[k] = result[k]
                }
                if(!length){
                    obj[name].callback(obj[name].result)
                    delete obj[name]
                }
            }
            return {
                on,
                dispatch
            }

        }
        var b = demo(2);
        b.on(‘test‘,function(result){
            console.log(result)
        })
        b.dispatch(‘test‘,{a:{a:‘sfdsf‘}})
        b.dispatch(‘test‘,{b:321})

    </script>
</body>
</html>

 

订阅发布者模式简单版 和 高级计数器 哈哈!

标签:set   发布   patch   ack   div   pre   tle   argument   func   

原文地址:http://www.cnblogs.com/yiyuanxia/p/7390667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!