J'ai une fonction qui prend un nom d'objet chaîne et j'ai besoin de la fonction de créer une nouvelle instance d'un objet qui a le même nom que la valeur de la chaîneCréation d'objets dynamiques
Par exemple,
function Foo(){}
function create(name){
return new name();
}
create('Foo'); //should be equivalent to new Foo();
Même si je sais que ce serait possible via eval, il serait bon d'essayer d'éviter de l'utiliser. Je suis également intéressé si quelqu'un a une des idées alternatives au problème (ci-dessous)
J'ai une base de données et un ensemble de (en utilisant la méthode OO classique) des classes, soit environ un pour chaque table qui définissent des opérations communes sur ce table. (Très similaire à Zend_Db pour ceux qui utilisent PHP). Comme tout est des tâches asynchrones faire en fonction du résultat du dernier peut conduire à code très échancré
var table1 = new Table1Db();
table1.doFoo({
success:function(){
var table2 = new Table2Db();
table2.doBar({
notFound:function(){
doStuff();
}
});
}
});
La solution évidente est de créer des méthodes d'aide que les résumés de la nature asynchrone du code.
Db.using(db) //the database object
.require('Table1', 'doFoo', 'success') //table name, function, excpected callback
.require('Table2', 'doBar', 'notFound')
.then(doStuff);
Qui simplifie les choses. Cependant le problème est que je dois être capable de créer les classes de table, dont les noms peuvent être déduits de la première augmentation passé à require
qui me conduit au problème ci-dessus ...
D'abord, merci pour la réponse. Comme toujours après avoir regardé une réponse, je me sens un peu stupide d'avoir raté des choses (rétrospectivement assez évidentes). Dans ce cas, les chaînes sont plus faciles, mais en passant le constructeur (quelque chose que je ne savais pas que l'on pouvait faire de cette façon) semble légèrement plus clair et plus clair. Je ne suis pas complètement opposé à l'utilisation d'eval, et comme vous le dites, il a sa place, cependant l'expérience m'a appris que si je pense que je dois l'utiliser 99% du temps je ne comprends pas assez la langue. (C'est l'une de ces fois). – Yacoby
@Yacoby bien dit! :) Surtout les dernières phrases. J'aimerais que tout le monde pense de cette façon. – galambalazs
C'était une bonne réponse. J'ai appris quelque chose de nouveau sur javascript! Merci :) – rossipedia