node.js - 这是闭包的问题吗?
伊谢尔伦
伊谢尔伦 2017-04-17 11:33:08
0
1
289

我尝试通过代码动态地添加eventemitter的事件...
但是事件没有正确地触发...
按自己理解是闭包还是上下文导致的问题, 但是我不懂怎么修正.
所以只好提问了...以下是我的代码.感谢万分!

javascriptvar 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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆 (1)
Peter_Zhu

是闭包的问题,你的函数fa,fb中不存在this的使用,所以不存在执行环境的问题。

javascriptee.on(k, function(){ console.log("触发事件["+k+"]"); o[k](); });

改为

javascript(function (k) { ee.on(k, function() { console.log("触发事件["+ k +"]"); o[k](); }); })(k);
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!