Javascript: la meilleure façon d'ajouter de la dynamique des méthodes?
Je me demande si il ya une meilleure façon d'ajouter de la dynamique des méthodes à un objet existant. En gros, je suis en train d'assembler de nouvelles méthodes dynamiquement et puis les ajouter à une fonction existante.
Cette démo code fonctionne.
builder = function(fn, methods){
//method builder
for(p in methods){
method = 'fn.' + p + '=' + methods[p];
eval(method);
}
return fn;
}
test = {}
test = builder(test, {'one':'function(){ alert("one"); }','two':'function(){ alert("two"); }'} );
test.one();
test.two();
OriginalL'auteur Geuis | 2009-02-25
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin d'eval chaque fois.
Vous pouvez créer la fonction de base d'objets, puis de les affecter en tant que propriétés de vos objets.
Canonique orienté objet, cependant, est d'utiliser les constructeurs et les prototypes, mais ce n'est pas vraiment dynamique, en ce sens que chaque objet que vous construisez aura les mêmes méthodes:
OriginalL'auteur levik
mhmh - j'ai peut-être un peu tard, mais de toute façon:
par exemple:
pas beaucoup mieux que eval.
(c'est dommage, mais les chaînes de caractères sont utilisés comme code-description, pas quelque chose de plus structuré comme en LISP)
OriginalL'auteur blabla999
Si vous avez besoin d'un objet de façon dynamique en fonction des types de... Par exemple:
Alors vous pouvez garder une référence à "cette" sortie de l'objet et de l'utiliser à l'intérieur de la méthodes.
De cette façon, vous pouvez obtenir une nouvelle dynamique de méthodes...
Cela permettra de sortie suivants:
OriginalL'auteur Marcello de Sales
Votre exemple pourrait être accompli sans chaînes:
Je ne suis pas sûr de savoir comment vous l'assemblage de ces méthodes, mais évitez d'utiliser des chaînes si vous le pouvez. Il y a probablement une meilleure solution.
OriginalL'auteur Zach
Faire, vous devez créer les méthodes à partir d'une chaîne? Si non il ya beaucoup de façons, y compris l'ajout de méthodes à un objet prototype ou de la définition de l'objet directement. La plupart de tout le commun des bibliothèques javascript qui ont des méthodes pour définir des objets/méthodes existantes ou créer des "espaces de noms". Découvrez YUI/Prototype/jQuery etc pour des exemples de la façon dont ils mettent en œuvre.
Sinon, si vous avez à construire à partir d'une chaîne puis evaling peut être la meilleure méthode pour ajouter dynamiquement des méthodes pour une définition de l'objet.
OriginalL'auteur Quintin Robinson