2012-05-15 10 views
4

메서드가 적은 개체가 있는데 그 중 하나를 이벤트 처리기로 바인딩하려고하지만 동일한 개체의 다른 메서드를 사용합니다. 콜백 함수에서 컨텍스트를 보존하는 가장 좋은 방법은 무엇입니까? 이 목적을 위해 jQuery UI core에서 볼 수 있듯이 일반적으로 $ .proxy 메서드가 사용되었습니다. 솔직하게 말하면이 방법이 마음에 들지 않지만 매우 명확하지 않습니다.컨텍스트를 콜백 함수에 전달하는 최선의 방법

의견이 있으십니까? 미리 감사드립니다!

var obj = { 
    someMethod: function(){...}, 
    callback : function(){ 
     ... 
     this.someMethod(); // or this.someMethod.call(...) 
     ... 
    }, 
}; 
// wrong 
$.bind(elm, obj.callback); 
// using $.proxy 
$.bind(elm, $.proxy(obj.callback, obj)); 

답변

4

옵션은 기본적으로 다음과 같습니다

  • $.proxy (당신이 지적했듯이)
  • 자바 스크립트 1.8의 Function.bind
  • Function.bind (같은, 예를 들면 비 네이티브 구현 , _.bind)
  • 인라인 익명 함수 : $.bind(elm, function() { obj.callback.apply(obj, arguments })

이들 중 어느 것도 다른 것보다 분명히 좋거나 확실하지 않습니다. (인라인 익명 기능을 제외하고는 Function.bind이고 친구들은 $.proxy보다 조금 더 일반적입니다). 더 중요한 것은 하나를 선택하고 일관성있게하는 것입니다.

+0

다른 방법은 클로저를 사용하는 것입니다. 그런 다음 객체가 아닌 코드를 구성하는 다른 방법을 선택해야합니다. – Roman

관련 문제