首页 > 其他 > 详细

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

时间:2017-08-18 18:14:36      阅读:214      评论:0      收藏:0      [点我收藏+]
<!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>

 

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

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

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