J’ai cherché des solutions, mais n’en ai trouvé aucun qui fonctionne.
J'ai une variable appelée onlyVideo
.
"onlyVideo"
la chaîne est passée dans une fonction. Je veux définir la variable onlyVideo
dans la fonction comme quelque chose. Comment puis je faire ça?
(Un certain nombre de variables peuvent être appelées dans la fonction. J'ai donc besoin qu'elle fonctionne de manière dynamique, et non d'instructions if
codées en dur.)
Edit: Il y a probablement une meilleure façon de faire ce que vous essayez de faire. J'ai demandé cela au début de mon aventure JavaScript. Découvrez comment fonctionnent les objets JavaScript.
Une simple introduction:
// create JavaScript object
var obj = { "key1": 1 };
// assign - set "key2" to 2
obj.key2 = 2;
// read values
obj.key1 === 1;
obj.key2 === 2;
// read values with a string, same result as above
// but works with special characters and spaces
// and of course variables
obj["key1"] === 1;
obj["key2"] === 2;
// read with a variable
var key1Str = "key1";
obj[key1Str] === 1;
Si c'est une variable globale, alors window[variableName]
.__ ou dans votre cas window["onlyVideo"]
devrait faire l'affaire.
Javascript a une fonction eval()
pour de telles occasions:
function (varString) {
var myVar = eval(varString);
// .....
}
Edit: Désolé, je pense avoir écrasé la question trop rapidement. Cela ne vous donnera que la variable, pour la définir vous avez besoin
function SetTo5(varString) {
var newValue = 5;
eval(varString + " = " + newValue);
}
ou si vous utilisez une chaîne:
function SetToString(varString) {
var newValue = "string";
eval(varString + " = " + "'" + newValue + "'");
}
Mais j'imagine qu'il existe un moyen plus approprié d'accomplir ce que vous recherchez? Je ne pense pas que eval () est quelque chose que vous voulez vraiment utiliser sauf s'il existe une bonne raison à cela. eval ()
En ce qui concerne eval vs. solutions globales variables ...
Je pense qu'il y a des avantages pour chacun mais c'est vraiment une fausse dichotomie ... Si vous êtes paranoïaque de l'espace de noms global, créez simplement un espace de noms temporaire et utilisez la même technique.
var tempNamespace = {};
var myString = "myVarProperty";
tempNamespace[myString] = 5;
Je suis sûr que vous pourrez alors accéder à tempNamespace.myVarProperty (maintenant 5), en évitant d’utiliser window pour le stockage. (La chaîne pourrait également être placée directement dans les crochets)
var myString = "echoHello";
window[myString] = function() {
alert("Hello!");
}
echoHello();
Dites non à la mauvais eval. Exemple ici: https://jsfiddle.net/Shaz/WmA8t/
Vous pouvez accéder à l'objet window en tant que tableau associatif et le définir de cette manière.
window["onlyVideo"] = "TEST";
document.write(onlyVideo);
La méthode window ['nomVariable'] fonctionne UNIQUEMENT si la variable est définie dans la portée globale. La bonne réponse est "Refactor". Si vous pouvez fournir un contexte "Object", il existe une solution générale possible, mais il existe des variables qu'aucune fonction globale ne pourrait résoudre en fonction de la portée de la variable.
(function(){
var findMe = 'no way';
})();
Si vous essayez d'accéder à la propriété d'un objet, vous devez commencer par la portée de window
et parcourir chaque propriété de l'objet jusqu'à atteindre celle que vous souhaitez. En supposant que a.b.c
ait été défini ailleurs dans le script, vous pouvez utiliser les éléments suivants:
var values = window;
var str = 'a.b.c'.values.split('.');
for(var i=0; i < str.length; i++)
values = values[str[i]];
Cela fonctionnera pour obtenir la propriété de n'importe quel objet, quelle que soit sa profondeur.
Tu peux faire comme ça
var name = "foo";
var value = "Hello foos";
eval("var "+name+" = '"+value+"';");
alert(foo);
Le code suivant facilite la référence à chacune de vos DIV et autres éléments HTML en JavaScript. Ce code doit être inclus juste avant la balise, afin que tous les éléments HTML aient été vus. Il devrait être suivi de votre code JavaScript.
// For each element with an id (example: 'MyDIV') in the body, create a variable
// for easy reference. An example is below.
var D=document;
var id={}; // All ID elements
var els=document.body.getElementsByTagName('*');
for (var i = 0; i < els.length; i++)
{
thisid = els[i].id;
if (!thisid)
continue;
val=D.getElementById(thisid);
id[thisid]=val;
}
// Usage:
id.MyDIV.innerHTML="hello";
Cela peut être fait comme ça
(function(X, Y) {
// X is the local name of the 'class'
// Doo is default value if param X is empty
var X = (typeof X == 'string') ? X: 'Doo';
var Y = (typeof Y == 'string') ? Y: 'doo';
// this refers to the local X defined above
this[X] = function(doo) {
// object variable
this.doo = doo || 'doo it';
}
// prototypal inheritance for methods
// defined by another
this[X].prototype[Y] = function() {
return this.doo || 'doo';
};
// make X global
window[X] = this[X];
}('Dooa', 'dooa')); // give the names here
// test
doo = new Dooa('abc');
doo2 = new Dooa('def');
console.log(doo.dooa());
console.log(doo2.dooa());