Bonjour à tous,

Je suis en train de développer un plugin et j'arrive à un point assez délicat. Pour développer mon plugin, j'utilise la méthode qui est décrite ici.

J'ai donc un objet principal contenant toute mes méthodes qui sert de prototype. Dans certaines méthodes, je vais faire appelle à des fonctions qui vont changer mon mot clé this qui ne fera plus référence à mon objet principal et cela m'ennuie. Par exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
openChannel: function() {
	var self = this;
 
	self.connection = new WebSocket(self.options.signallingServer);
 
	// When the connection is open, send some data to the server
	self.connection.onopen = self.onChannelOpened;
 
	// Log errors
	self.connection.onerror = function (error) {
		console.log('WebSocket Error ' + error);
	}
	// Log messages from the server
	self.connection.onmessage = self.onChannelMessage;
 
	self.connection.onclose = self.onChannelClosed;
 
	$(window).unload(function(){ self.connection.close(); self.connection = null });
},
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
onChannelMessage: function(message) {
	var self = this;
	self.message = JSON.parse(message.data);
 
	switch(self.message["type"]) {
	case "GETROOM" :
		self.room = self.message["value"];
		self.resetStatus();
	break;
	case "SDP" :
		if (self.message["value"].indexOf("\"ERROR\"", 0) == -1) {
		          if (!self.guest && !self.started) self.maybeStart();
		          self.pc.processSignalingMessage(self.message["value"]);
		}
	break;
	case "BYE" :
		self.onChannelBye();
	break;
	}
},
Le problème ici est que je ne vais plus pouvoir appeler les méthodes de cette instance d'objet principal car this va référer à mon objet Websocket.

Et si j'essaye de faire ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
self.connection.onmessage = function() {
	self.onChannelMessage.call(self);
}
Je ne pourrais plus retrouver le message qui est en argument de ma méthode onChannelMessage().

Et je ne veux pas non plus à avoir à mettre ma méthode onChannelMessage() directement dans une fonction anonyme, car je l'utilise à des endroits différents.

Quelqu'un aurait-il une idée sur comment procéder ?

Merci d'avance