Ответ 1
Если это глобальная переменная, то window[variableName]
или в вашем случае window["onlyVideo"]
должен сделать трюк.
Ive искал решения, но не мог найти какую-либо работу.
У меня есть переменная с именем onlyVideo
.
"onlyVideo"
строка передается в функцию. Я хочу установить переменную onlyVideo
внутри функции как что-то. Как я могу это сделать?
(Существует ряд переменных, которые могут быть вызваны в функцию, поэтому мне нужно, чтобы они работали динамически, а не жестко закодированные операторы if
.)
Изменить: Возможно, лучший способ сделать то, что вы пытаетесь сделать. Я спросил это раньше в своем приключении JavaScript. Посмотрите, как работают объекты JavaScript.
Простое введение:
// 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;
Если это глобальная переменная, то window[variableName]
или в вашем случае window["onlyVideo"]
должен сделать трюк.
Javascript имеет функцию eval()
для таких случаев:
function (varString) {
var myVar = eval(varString);
// .....
}
Изменить: Извините, я думаю, что я слишком быстро просмотрел вопрос. Это даст вам только переменную, чтобы установить ее вам.
function SetTo5(varString) {
var newValue = 5;
eval(varString + " = " + newValue);
}
или если используется строка:
function SetToString(varString) {
var newValue = "string";
eval(varString + " = " + "'" + newValue + "'");
}
Но я полагаю, что есть более подходящий способ выполнить то, что вы ищете? Я не думаю, что eval() - это то, что вы действительно хотите использовать, если нет большой причины для этого. eval()
Что касается решений eval против глобальных переменных...
Я думаю, что есть преимущества для каждого, но это действительно ложная дихотомия. Если вы параноик глобального пространства имен, просто создайте временное пространство имен и используйте ту же технику.
var tempNamespace = {};
var myString = "myVarProperty";
tempNamespace[myString] = 5;
Довольно уверен, что вы могли бы получить доступ как tempNamespace.myVarProperty(теперь 5), избегая использования окна для хранения. (Строка также может быть помещена непосредственно в скобки)
var myString = "echoHello";
window[myString] = function() {
alert("Hello!");
}
echoHello();
Скажи нет злому Эвалу. Пример здесь: https://jsfiddle.net/Shaz/WmA8t/
Вы можете получить доступ к объекту окна как ассоциативный массив и установить его таким образом
window["onlyVideo"] = "TEST";
document.write(onlyVideo);
Метод window ['variableName'] ТОЛЬКО работает, если переменная определена в глобальной области. Правильный ответ - "Рефакторинг". Если вы можете предоставить контекст "Объект", тогда существует возможное общее решение, но есть некоторые переменные, которые глобальная функция не может разрешить на основе области действия переменной.
(function(){
var findMe = 'no way';
})();
Если вы пытаетесь получить доступ к свойству объекта, вы должны начать с области действия window
и пройти через каждое свойство объекта, пока не дойдете до того, которое вам нужно. Предполагая, что a.b.c
был определен где-то еще в сценарии, вы можете использовать следующее:
var values = window;
var str = 'a.b.c'.values.split('.');
for(var i=0; i < str.length; i++)
values = values[str[i]];
Это будет работать для получения свойства любого объекта, независимо от его глубины.
Вы можете сделать это
var name = "foo";
var value = "Hello foos";
eval("var "+name+" = '"+value+"';");
alert(foo);
Это можно сделать так:
(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());
Следующий код позволяет легко ссылаться на каждый из ваших DIV и других элементов HTML в JavaScript. Этот код должен быть включен непосредственно перед тегом, чтобы все элементы HTML были видны. За ним должен следовать ваш код 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";