在运行时动态定义javascript中的任意数量的函数

时间:2014-02-19 04:25:44

标签: javascript

我正在开发一个需要用户在文件中提供一些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!'); });

1 个答案:

答案 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);
}