我正在开发一个需要用户在文件中提供一些JSON数据的应用程序。对于每个JSON对象读入,我需要定义trainer.on()函数 - 请参阅下面的代码。因此,我需要能够在运行时动态定义任意数量的trainer.on()函数。目前,我这样做:
for (var obj in gestures) {
trainer.fromJSON(JSON.stringify(gestures[obj]));
alert(gestures[obj].name);
trainer.on(gestures[obj].name, function() {
alert('Recognized ' + gestures[obj].name);
});
}
然而,这种方法似乎只定义了一个trainer.on()函数(对于最后读入的手势)。我不确定如何以编程方式解决在JavaScript中动态定义函数的问题......
请注意,如果我为每个读入对象手动执行此操作,它将如下所示:
trainer.on('One', function() { alert('Recognized One!'); });
trainer.on('Two', function() { alert('Recognized Two!'); });
答案 0 :(得分:1)
IIFE(立即调用函数表达式)可以帮助捕获事件处理程序连接时所期望的范围内的变量。这就是概念:
for (var obj in gestures) {
trainer.fromJSON(JSON.stringify(gestures[obj]));
(function(name) {
trainer.on(name, function() {
alert('Recognized ' + name);
});
}) (gestures[obj].name);
alert(gestures[obj].name);
}