La réponse précédente est incomplète.
Le 1er exemple ajoute des méthodes UNIQUEMENT À CETTE INSTANCE SPÉCIFIQUE de la classe Client. Le 2ème exemple ajoute des méthodes à tous les prototypes de classe.
Cette distinction est très importante pour certains cas d'utilisation. Si par exemple le client qui se connecte à une pièce a des privilèges d'administration créés par votre logique, dans l'instance client onConnect, vous n'ajouterez des méthodes qu'au client utilisateur de l'administrateur sinon dans chaque méthode admin, vous devrez vérifier si le client est administrateur ou non (ce qui serait laid)
Exemple:
application.isAdminUser = function(cParams) {
if (cParams.username == 'admin') {
return true;
} else {
return false;
}
}
/* bad - people can simulate clients */
application.onConnect = function(client, cParams) {
client.disconnectUser = function(userId) { application.myDisconnect(userId); };
client.allClientsMethod = function() { };
}
/* good */
application.onConnect = function(client, cParams) {
if(this.isAdminUser(cParams)) {
client.disconnectUser = function(userId) { application.myDisconnect(userId); };
}
// this following is applied to all connecting clients
client.allClientsMethod = function() { };
// and can be done also by:
// Client.prototype.allClientsMethod = function() { };
}
Si vous ne mettez pas le disonnectUser dans le si vous pouvez imaginer une personne malveillante pourrait forger un client qui lui permettrait de déconnecter l'un de vos utilisateurs.
J'espère que cela aide.