2009-12-28 19 views

Répondre

2

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.

1

Le premier exemple ajoute les fonctions à l'objet client qui a été créé. Le deuxième exemple ajoute les fonctions au prototype de la classe qui sera créée lors de l'émission de onConnect.

alors en fait, il y a deux façons d'obtenir les mêmes résultats.

Si je devrais deviner ce qui est plus rapide, je devinerais que l'utilisation du 2ème exemple sera un peu plus rapide parce que vous ajoutez des fonctions aux définitions de classe.