我尝试通过代码动态地添加eventemitter的事件...
但是事件没有正确地触发...
按自己理解是闭包还是上下文导致的问题, 但是我不懂怎么修正.
所以只好提问了...以下是我的代码.感谢万分!
javascript
var events = require("events"); ee = new events.EventEmitter(); function fa() { console.log("a"); }; function fb() { console.log("b"); }; var o = { "ka": fa, "kb": fb}; for(var k in o) { console.log("注册事件["+k+"]"); ee.on(k, function() { console.log("触发事件["+k+"]"); o[k](); }); } ee.emit("ka"); ee.emit("kb");
输出结果:
注册事件[ka]
注册事件[kb]
触发事件[kb]
b
触发事件[kb]
b
天蓬老师2017-04-17 11:35:08
是闭包的问题,你的函数fa,fb中不存在this的使用,所以不存在执行环境的问题。
javascript
ee.on(k, function(){ console.log("触发事件["+k+"]"); o[k](); });
改为
javascript
(function (k) { ee.on(k, function() { console.log("触发事件["+ k +"]"); o[k](); }); })(k);