연결을 유지하려면 어떻게 해야 하나의 맥락'이'에 jquery
-
20-08-2019 - |
문제
내가 다음과 같다:
var Something = function(){
this.render = function(){};
$(window).resize(function(){
this.render();
});
}
문제는 익명 함수 안에 있는'이'는 창체입니다.내가 뭔가를 할 수 있는 다음과 같:
var Something = function(){
this.render = function(){};
var tempThis = this;
$(window).resize(function(){
tempThis.render();
});
}
하지만 더 나은 방법이 있을까?이 보이지 않는 매우 우아한입니다.
해결책
당신이 찾은 솔루션은 대부분의 사람들이 사용하는 솔루션입니다. 일반적인 협약은 TempThis 변수를 "That"이라고 부르는 것입니다.
var Something = function(){
this.render = function(){};
var that = this;
$(window).resize(function(){
that.render();
});
};
다른 팁
그것은 당신의 최선의 선택처럼 보입니다. 더 나은 방법이 있다고 생각하지 않습니다. (내가 틀렸다면 누군가가 내 수정).
참고 통제하는 기능이 올 다음 버전의 JQuery
나는 많은 타이트한 상황에서 이런 식으로하고 있습니다. 우아하게 보이지는 않지만 결코 실패하지 않습니다. 실제로 JavaScript 폐쇄가 작동합니다.
JRH
그것이 바로 내가하는 일입니다. jQuery에만 국한되지 않습니다.
var Construct = function() {
var self = this; //preserve scope
this.materials = 2000;
this.build = function(){
self.materials -= 100;
};
};
새로운 스코프 변수 앞에서 VAR 키워드를 사용해야합니다. 그렇지 않으면 새로운 글로벌 변수를 생성합니다. 로컬 변수로서, 폐쇄를 통해 내부 기능 내부에서도 여전히 액세스 할 수 있습니다.
변수를 최소로 유지하는 최상의 솔루션은 function.prototype.bind () 메소드를 사용하는 것입니다.
var Something = function(){
this.render = function(){};
$(window).resize( this.render.bind( this ) );
}
미래의 합병증을 유발할 수있는이 방법의 문제는 드물게 사용하도록 선택해야합니다. $(this)
요소를 잡으려면. 따라서 사용하는 것이 가치가 있다고 제안 할 수도 있습니다. Function.prototype.bind()
크기 조정 방법에서는 클릭 한 요소를 직접 타겟팅 해야하는 클릭 함수에서 사용하는 것이 좋은 솔루션이 아닙니다.
이것 좀 봐 jsfiddle 작업 예제.
참조 function.prototype.bind ()에 대한 모질라 문서 자세한 내용은
다른 방법은 사용할 수 있지만, 이의 컨텍스트를 유지하기위한 변수를 만드는 것은 질문에 따라 바람직하지 않은 효과입니다.