2017-03-28 4 views
0

나는 비슷한 질문을했지만 동일하지 않았습니다. 이것은 새로운 ES6 클래스 키워드와이를 처리하는 방법에 중점을 둡니다. SignalR이 클래스 메소드를 호출 중입니다. 클래스 메서드 'this'가 클래스 인스턴스 자체가 아닌 SignalR 허브를 참조 할 때. SignalR이 새로운 ES6 클래스를 사용하여 호출 한이 클래스 멤버 내에서 클래스 인스턴스를 어떻게 얻을 수 있습니까?SignalR 클래스 메서드 콜백 및 'this'

class gameLoad { 
    constructor(){ 

    } 

    init(){ 
     // create the network object and hook it's functions update for loading 
     this.network = $.connection.testHub; 
     this.network.client.hello = this.sayHello; 
    } 

    // this is called from signalR and 'this' now refers to the signalR hub inside this function. how can I get the class instance? 
    sayHello(){ 
     console.log(this); // 'this' refers to signalR object not gameLoad object 
    } 

    create(){ 
     var self = this; 
     $.connection.hub.start().done(function() { 
      console.log("Started!") 
      console.log("Calling server function."); 

      // make our first network call which will turn around and call client.hello which is bound to this classes sayHello() member function 
      self.network.server.hello(); 
     }); 
    } 
} 
+0

이 ES6 클래스와 아무 상관이 없다, 그것은 일을 정확히 동일한 방법 : 당신이 화살표 함수로의 sayHello를 변환 할 수 있습니다, 또는

this.network.client.hello = this.sayHello.bind(gameLoad); 

: 당신은 그 시간에 거기에 gameLoad을 결합해야합니다 ES5에서. – Bergi

답변

1

클래스를 사용할 때는 'this'가 올바르게 설정되도록 화살표 함수를 사용하는 것이 가장 좋습니다.

예에서 sayHello를 클라이언트의 hello 메소드에 지정합니다.

sayHello =() => { 
+0

그러면 bind()를 호출하면 해당 함수 내에서 'this'를 사용할 수있게됩니까? 나는 화살표 함수 구문의 큰 팬이 아니지만 이러한 것들을 제공 할 것입니다. – user441521