面试某个公司的一道编程题,这道题是要求完成
var Event={
on:function(eventName,callback){
//你的代码
},
emit:function(eventName){
//你的代码
}
}实现下面的功能:Event.on("test",function(){console.log("test")});Event.on("test",function(str){console.log(str)});Event.emit("test","hello world");//运行这句代码可以输出test和hello worldvar person1={},person2={}; Object.assign(person1,Event); Object.assign(person2,Event); person1.on("call1",function(){ console.log("person1"); }); person2.on("call2",function(){ console.log("person2"); }); person1.emit("call1");//输出person1; person1.emit("call2");//不输出 person2.emit("call1");//不输出 person2.emit("call2");//输出person2;
下面是我写出来的代码:
var Event={ on:function(eventName,callback){ eventName=eventName=="on"||eventName=="emit"? eventName+"1":eventName; if(this["array"]==undefined){ this["array"]={}; } if(this[eventName]==undefined){ this[eventName]=[]; } this[eventName].push(callback); this["array"][eventName]= this[eventName]; }, emit:function(eventName){ eventName=eventName=="on"||eventName=="emit"? eventName+"1":eventName; var str=arguments[1]; if( this["array"][eventName]){ for(var i in this["array"][eventName]){ this["array"][eventName][i].call(null,str); } } } };测试可以实现上述功能