2014-02-19 22 views
0

我正在開發一個應用程序,要求用戶在文件中提供一些JSON數據。對於每個JSON對象的讀入,我需要定義一個trainer.on()函數 - 請參閱下面的代碼。因此,我需要能夠在運行時動態定義任意數量的trainer.on()函數。目前,我做這樣的:運行時在javascript中動態定義任意數量的函數

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

當您連接事件處理程序時,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); 
}