2013-05-20 2 views
1

이벤트에 함수를 연결하는 경우에 컨텍스트를 유지 : 함수 내I 내에 포함 된 일련의 기능이

$('a.specialLink').click(main.func2); 

: 코드 뒤에

var main = { 
    func1: function() { 
     ... 
    }, 
    func2: function() { 
     ... 
    } 
} 

를,이 선이 , func2, this을 통해 개체에 대한 참조가 있지만 onclick 이벤트에서 호출 될 때 this 컨텍스트는 함수가있는 개체가 아니라 개체를 호출 한 요소로 변경됩니다. 기본 객체에 this 컨텍스트를 반환하는 방법이 있습니까? 나는 main.으로 대체 할 수 있지만, 인스턴스화 된 객체에 대해 비슷한 작업을 수행해야한다면 작동하지 않을 것입니다.

지금까지 생각할 수있는 유일한 것은이 대체 설정 라인이하는 것입니다 : func2이 (this 정의되지 않은 경우에 설정) this로 사용되는 인수를 가지고

$('a.specialLink').click(function() { main.func2(main) }); 

을하지만, 나는 저렇게 지저분 해. 지금까지 생각할 수

답변

3

유일한 것은이 교체 설치 라인을 가지고하는 것입니다 : 그것을 할 수있는 방법은 기본적입니다

$('a.specialLink').click(function() { main.func2(main) }); 

. 대신 당신은 또한 ES5.1 bind method를 사용할 수있는 함수 표현식에서 쓰는, 그러나

$('a.specialLink').click(function() { main.func2() }); 

:이 같은 함수를 호출 할 때부터 그러나, 당신은 이미 this context이되고, 인수로 main를 생략 할 수 있습니다 :

$('a.specialLink').click(main.func2.bind(main)); 

이 경우 이벤트 개체와 마찬가지로 모든 인수가 암시 적으로 전달됩니다.

+0

아, 잘 작동합니다. 감사 – topherg

관련 문제