meilleure approche des variables membres dans le javascript orienté objet?
C'est un suivi à une question que je viens de poster.
Je me demandais comment vous gérer membre des variables en javascript clases lors de l'utilisation de Maclasse.prototype à définir des méthodes.
Si vous définir toutes les méthodes dans la fonction constructeur:
function MyClass(){
this.myMethod = function(){}
}
Vous pouvez très bien déclarer des variables de membre et d'y accéder depuis l'intérieur de vos méthodes:
function MyClass(){
var myVar = "hello";
this.myMethod = function(){
alert(myVar);
}
}
Lors de l'utilisation de l'Objet.prototype technique, vous perdez ce concept, et de le faire comme cela;
function MyClass(){}
MyClass.prototype.myVar = "hello";
MyClass.prototype.myMethod = function(){alert(this.hello)};
Je ne suis pas fou de devoir écrire "ce" à chaque fois que je accéder à une variable membre. Je veux utiliser l'Objet.prototype approche pour la mémoire et la flexibilité des raisons, mais il semble beaucoup plus maladroit de la syntaxe sage. Est-ce la façon dont les gens travaillent généralement?
merci,
-Morgan
source d'informationauteur morgancodes
Vous devez vous connecter pour publier un commentaire.
Vous devriez obtenir plus de votre aversion à l'aide de la
this
pointeur pour accéder aux variables membres.Affecter des variables dans le constructeur, et vous pouvez y accéder avec le prototype méthodes:
Oui, ces attributs de l'objet sont publiques mais, comme Guido dirais, nous sommes tous des adultes ici. Javascript est, après tout, un texte clair, faiblement typé, langage interprété. Les avantages du "privé" variables d'environnement sont fragile, au mieux.
Je dis juste être explicite et évidente sur la façon dont votre objet doit être accessible, et les contrevenants s'écartent qu'à leurs propres risques.
La visiblity d'attributs d'un objet varie en fonction de la façon dont vous les déclarez
Vous devez utiliser le prototype de stocker des méthodes, parce que quand vous vous retrouvez avec 100 méthodes, ils ne sont pas copiés entre les instances plutôt qu'ils utilisent le même prototype.
J'utilise quelque chose le long de ces lignes:
Un (pas si) petite remarque sur le "privé" des variables lors de l'attribution des méthodes pour le prototype:
Il est vrai que vous ne pouvez pas utiliser le constructeur pour créer une fermeture c'est des variables, mais vous pouvez bien sûr entourent le prototype de méthodes avec une fonction anonyme et privée des variables partagées entre les instances de l'objet:
Avec quelques autres tourner, vous pouvez mettre en œuvre vos propres mécanismes de protection, par exemple, des variables qui ne peuvent être lus, pas écrit par:
Cette approche ne souffre pas de la vaste étendue de la fonction de l'objet et de la fermeture de la création, mais la hausse de la recherche-à la fois par une petite quantité.
Edit: Vous devez également fournir une fonction
Sinon, c'est une belle façon de présenter une fuite de mémoire...
Edit2: Vous pouvez également obtenir autour de la nécessité d'une
registerInstance()
fonction avec le motif suivant:Vous trouverez un grand nombre de personnes à l'aide de la
Y compris moi-même. J'ai tendance à ne pas écrire d'énormes JS classes et cette syntaxe est assez facile à écrire et permet également d'privé méthodes/variables.
MODIFIER
De sorte que votre train de me dire que l'utilisation de XML pour le SAVON paquets juste pour faire du débogage d'une étape plus facile est d'accord (même si le langage XML déchets un TAS d'espace et de bande passante, et le temps d'analyse), mais l'ajout de quelques octets par javascript instance de l'objet n'est pas d'accord, même si elle nous permet d'utiliser certains des regards croisés des concepts OO qui devrait existé dans la langue dès le début?
Hmm...
(pour mon commentaire XML lire les commentaires pour: RESTE les Uri et les opérations sur un objet qui peut être commenté, étiqueté, classé, etc)