문제

내가 다음과 같다:

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 ()에 대한 모질라 문서 자세한 내용은

다른 방법은 사용할 수 있지만, 이의 컨텍스트를 유지하기위한 변수를 만드는 것은 질문에 따라 바람직하지 않은 효과입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top