2013-05-14 4 views
3

코드에 약간 문제가 있습니다. 여기있다 :콜백 함수의 클래스 속성 액세스

// We are in the constructor of my class 
this.socket.emit('getmap', {name: name}, function(data){ 
    this.mapData = data.map; 
    this.load(); 
}); 

문제는 mapData 속성이 설정 사실, this 네임 스페이스 소켓을 의미되지 않는 것입니다. 이 기능을 통해 this.mapData에 어떻게 액세스 할 수 있습니까?

그리고 내 나쁜 영어 죄송합니다 ...

+0

'[잘못된 컨텍스트 호출 이벤트 핸들러]의 this.mapData' : – palra

+0

중복 가능성 (http://stackoverflow.com/questions/6300817/event-handler-called- : 일반적인 패턴이있다 with-wrong-context) –

+0

@palra 답변 중 하나를 "정확함"으로 표시 하시겠습니까? –

답변

7

this 개체에 대한 참조를 저장해야합니다. 콜백 내에서 this은 함수가 호출 된 객체를 나타냅니다.

// We are in the constructor of my class 
var self = this; 
this.socket.emit('getmap', {name: name}, function(data){ 
    self.mapData = data.map; 
    self.load(); 
}); 
+0

나를 이길! :) –

3

당신은 자바 스크립트를 this의 가치를 결정하는 방법을 알고 있어야합니다. 사용하고있는 것과 같은 익명의 함수에서는 대개 웹상의 전역 네임 스페이스 또는 window 개체입니다. 어쨌든, 나는 당신이 클로저를 이용하고 생성자에서 변수를 사용하도록 제안 할 것이다.

// We are in the constructor of my class 
var _this = this; 
this.socket.emit('getmap', {name: name}, function(data){ 
    _this.mapData = data.map; 
    _this.load(); 
}); 
+0

문제를 해결해 주셔서 감사합니다! : D – palra

+0

@palra 일반적으로 자바 스크립트에서'this' 키워드를 읽는 것이 좋습니다. 예 : http://devign.me/javascript-this-keyword/. Google "javascript this keyword"및 많은 설명을 찾을 수 있습니다. –