¿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 .

  • ¿Puede un browser comunicarse con otro browser en la misma networking directamente?
  • nodejs a <video> streaming usando WebRTC
  • Cómo get IP local / interna con JavaScript
  • Enviar datos de image a través del canal de datos RTC
  • Raspberry Pi Cam con controller WebRTC y UV4l (código fuente cerrado?)
  • WebRTC: Cómo calcular el ancho de banda de usuario / latencia de networking de RTC Peer Connection
  • Cómo escuchar el "Dejar de compartir", click la API de Chrome DesktopCapture
  • Descargar una secuencia de datos grande (> 1 Gb) usando JavaScript
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.