2011-08-28 3 views

답변

6

당신은 현재 컨텍스트에 콜백 함수를 바인딩 할 수 있습니다 어떻게 함수가 호출되는지. 당신은 함수의 변수 외부로 this를 할당하고, 대신에이 변수를 사용할 수 있습니다 : 이벤트 콜백에서

var that = this; 
$('element').slideDown(5000, function() { 
    that.moving = false; //use that instead of this here 
}); 
+1

'$ .proxy '예를 들어, 다른 함수 호출의 인수 목록 내부에서 함수를 호출하는 것이므로 두 번째 오른쪽 괄호'''를 놓치기 쉽습니다 -': p' –

+0

hehe, 멋진 catch :) – arnaud576875

+0

개체 외부에서 '움직이는'것에 액세스 할 필요가 없다면 이것을 제거하십시오. 움직이기 전에. 그것은 당신이 당신의 '그'에 접근하는 것과 똑같은 방식으로 작동 할 것입니다.이 답은 콜백에서 'this'에 접근해야 할 때 고전적인 답입니다. 그러나 외부에서 액세스하지 않을 액세스 변수 만 필요하면 과도합니다. – Blacksad

0

사용 moving 대신 this.moving의 그들이 사용하는 경우

변수는 위의 변수에 액세스 할 수 있도록도 이벤트 콜백 내에서, 컨텍스트에 바인딩 (모두 발행 수에서). 값이 따라 그것의,

this 현재 상황입니다 :

$('element').slideDown(5000, $.proxy(function() { 
    this.moving = false; 
}), this); // "this" inside of the function will be this "this" 

jQuery.proxy


이 또는 당신이 할 수있는 참조 :

+0

이것은 객체의 다른 메소드가'moving'에 접근하는 것을 허용하지 않습니다. – arnaud576875

+0

다른 메소드는 move가 메소드 외부에서 선언되는 한 액세스 할 수 있습니다. 유일한 것은 '움직이는'것이 사적인 변수가된다는 것입니다. 위의 해결책은 효과가 있지만 내 생각에는 과도합니다. – Blacksad

+0

당신은 전체 객체 + 이동 변수를 개인화하기 위해 IIFE에 넣어야 할 것입니다. – arnaud576875

0

thisevent.target를 참조하거나 이벤트를 캡처 한 요소입니다. 이 movingsome_name

에 살고 첫 moving의 다른 것이라고 생각

show : function() 
{ 
    var moving = true; 

    $('element').slideDown(5000, function() 
    { 
     moving = false; 
    }); 
}, 

, :

당신은 자바 스크립트 클로저의 장점을 가지고이 같은 moving 속성에 액세스 할 수 있습니다

관련 문제