2009-03-16 6 views
1

J'ai lu le livre de Diaz Pro JavaScript Design Patterns. Grand livre. Je ne suis moi-même pas un pro par tous les moyens. Ma question: puis-je avoir une fonction statique qui a accès aux variables d'instance privées? Mon programme a un tas de périphériques, et une sortie de l'un peut être connecté à l'entrée d'un autre. Cette information est stockée dans les tableaux d'entrées et de sorties. semblentMéthode publique statique accédant aux variables d'instance privées en Javascript

var Device = function(newName) { 
    var name = newName; 
    var inputs = new Array(); 
    var outputs = new Array(); 
    this.getName() { 
     return name; 
    } 
}; 
Device.connect = function(outputDevice, inputDevice) { 
    outputDevice.outputs.push(inputDevice); 
    inputDevice.inputs.push(outputDevice); 
}; 

//implementation 
var a = new Device('a'); 
var b = new Device('b'); 
Device.connect(a, b); 

Cela ne veut pas travailler parce que Device.connect n'a pas accès aux sorties des appareils et des tableaux d'entrées: Voici mon code. Existe-t-il un moyen d'y accéder sans ajouter de méthodes privées (comme pushToOutputs) à Device qui l'exposerait?

Merci! Steve.

Répondre

2

Eugene Morozov a raison - vous ne pouvez pas accéder à ces variables si vous les créez dans la fonction telle que vous êtes. Mon approche habituelle ici est de les rendre variables this, mais les nommer il est clair qu'ils sont censés être privés:

var Device = function(newName) { 
    this._name = newName; 
    this._inputs = new Array(); 
    this._outputs = new Array(); 
    this.getName() { 
     return this._name; 
    } 
}; 
Device.connect = function(outputDevice, inputDevice) { 
    outputDevice._outputs.push(inputDevice); 
    inputDevice._inputs.push(outputDevice); 
}; 

//implementation 
var a = new Device('a'); 
var b = new Device('b'); 
Device.connect(a, b); 
1

Vous créez une fermeture et vous n'avez aucun moyen d'accéder aux variables de fermeture depuis l'extérieur sauf en utilisant une méthode privilégiée. Franchement, je n'ai jamais ressenti le besoin de variables privées, surtout en code Javascript. Donc je ne voudrais pas les déranger et les rendre publics, mais c'est mon opinion.

Questions connexes