Comment écrire ce code JavaScript sans eval?Comment écrire ce code JavaScript sans eval?
var typeOfString = eval("typeof " + that.modules[modName].varName);
if (typeOfString !== "undefined") {
doSomething();
}
Le point est que le nom de la var que je veux vérifier est dans une chaîne.
Peut-être que c'est simple mais je ne sais pas comment.
Editer: Merci pour les réponses très intéressantes jusqu'à présent. Je vais suivre vos suggestions et intégrer cela dans mon code et faire des tests et des rapports. Cela pourrait prendre un moment.
Édition2: J'ai eu un autre regard sur le pourrait et c'est peut-être mieux que je vous montre une plus grande image. Je suis reconnaissant pour les experts pour expliquer si beau, il vaut mieux avec plus de code:
MYNAMESPACE.Loader = (function() {
function C() {
this.modules = {};
this.required = {};
this.waitCount = 0;
this.appendUrl = '';
this.docHead = document.getElementsByTagName('head')[0];
}
function insert() {
var that = this;
//insert all script tags to the head now!
//loop over all modules:
for (var modName in this.required) {
if(this.required.hasOwnProperty(modName)){
if (this.required[modName] === 'required') {
this.required[modName] = 'loading';
this.waitCount = this.waitCount + 1;
this.insertModule(modName);
}
}
}
//now poll until everything is loaded or
//until timout
this.intervalId = 0;
var checkFunction = function() {
if (that.waitCount === 0) {
clearInterval(that.intervalId);
that.onSuccess();
return;
}
for (var modName in that.required) {
if(that.required.hasOwnProperty(modName)){
if (that.required[modName] === 'loading') {
var typeOfString = eval("typeof " + that.modules[modName].varName);
if (typeOfString !== "undefined") {
//module is loaded!
that.required[modName] = 'ok';
that.waitCount = that.waitCount - 1;
if (that.waitCount === 0) {
clearInterval(that.intervalId);
that.onSuccess();
return;
}
}
}
}
}
};
//execute the function twice a second to check if all is loaded:
this.intervalId = setInterval(checkFunction, 500);
//further execution will be in checkFunction,
//so nothing left to do here
}
C.prototype.insert = insert;
//there are more functions here...
return C;
}());
var myLoader = new MYNAMESPACE.Loader();
//some more lines here...
myLoader.insert();
Edit3:
Je prévois de mettre cela dans l'espace de noms global dans MYNAMESPACE.loadCheck variable, la simplicité, de sorte que le résultat serait, en combinant des différentes réponses et commentaires:
if (MYNAMESPACE.loadCheck.modules[modName].varName in window) {
doSomething();
}
Bien sûr, je vais devoir mettre à jour la classe Loader où jamais « nomVar » est mentionné.
Est-ce une variable locale? –
Quel est le problème avec simplement faire typeof that.modules [nom_module] .varName? Pouvez-vous poster votre code entier. –
@Alexandre: c'est le code d'une fonction d'une classe loader. Donc "ça" fait référence à une instance de la classe. Le code est dans une fonction de la classe. – user89021