2014-02-19 3 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 (Immediately Invoked Function Expression)는 이벤트 처리기를 연결할 때 예상되는 범위에서 변수를 캡처하는 데 도움이 될 수 있습니다. 이것이 개념입니다.

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); 
} 
관련 문제