js观察者模式学习

      function Events(){
            var obj = {};
            this.on=function(key,fn){
               var stack;
               stack = obj[key] || (obj[key] =[]);
               
               return stack.push(fn);
            }
            this.off=function(key){

                var stack;
                return (stack=obj[key]) != null ? stack.length=0 : void 0;//此处stack.length=0不等同于stack=[],如果设置stack=[],并不能作用于object[key]
            }
            this.once=function(key,fn){
                this.off(key);
                return this.on(key,fn);
            }
            this.trigger=function(){
                var key,stack,i;
                key = [].shift.call(arguments);
                stack = obj[key]||(obj[key] = []);
                for(i=0;i<stack.length;i++){
                    stack[i].apply(this,arguments);
                }
            }
        }
        var events = new Events();
        events.on("play",function(data){
            console.log(data.name)
        });
        events.on("play",function(data){
            console.log(data.age)
        });
        events.trigger("play",{name:"dpd",age:13})
原文地址:https://www.cnblogs.com/dupd/p/5968071.html