¿Cómo puedo hacer que esto se refiera a la class en la function?

Usualmente cuando usamos this , se refiere a la class.

Pero en este caso, this es dataChannel , ¿cómo puedo permitir que this refiera a VideoService nuevamente? Gracias

 export class VideoService { dataChannel:any; setupPeerConnection() { this.dataChannel.onopen = this.dataChannelStateChanged; } dataChannelStateChanged() { // here this = dataChannel, how can I let this = VideoService console.log(this); } } 

2 Solutions collect form web for “¿Cómo puedo hacer que esto se refiera a la class en la function?”

Vincula el context explícitamente con Function.prototype.bind :

 export class VideoService { dataChannel:any; setupPeerConnection() { this.dataChannel.onopen = this.dataChannelStateChanged.bind(this); } dataChannelStateChanged() { console.log(this); } } 

o use la function de flecha para preservar el scope léxico:

 export class VideoService { dataChannel:any; setupPeerConnection() { this.dataChannel.onopen = () => this.dataChannelStateChanged(); } dataChannelStateChanged() { console.log(this); } } 

Podría usar bind .

 setupPeerConnection() { this.dataChannel.onopen = this.dataChannelStateChanged.bind(this); } 

bind crea una copy de una function con el set de objects especificado como this .

  • Generación de events para sitios web controlados por gestos
  • WebRTC Data Channel server a los clientes de comunicación UDP. ¿Es actualmente posible?
  • Reelaboración punto a punto para la conferencia, WebRTC
  • Cómo enviar un package UDP con Web RTC - Javascript?
  • ¿Puedo usar WebRTC para abrir una connection UDP?
  • Dónde almacenar flujos de WebRTC al comstackr la aplicación React con networkingux
  • Google Chrome: error en la captura de pantalla cuando se usa iframe, el mismo script funciona sin iframe
  • ¿RTCPeerConnection funciona en Microsoft Edge?
  • Transmitir files multimedia usando WebRTC
  • getUserMedia falla con TrackStartError al permitir el acceso al micrófono
  • ¿Por qué getUserMedia lanza un cuando hago clic en "Permitir" en Chrome?
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.