Я искал решения, но не мог найти такую работу.
У меня есть переменная с именем 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;
javascript
variables
Switz
источник
источник
Ответы:
Если это глобальная переменная, то
window[variableName]
или в вашем случаеwindow["onlyVideo"]
следует сделать свое дело .источник
scope[property]
или дажеthis[property]
this
контекст, на что он указывает, зависит от того, как вызывается функция. В JS, 50% времени ,this
это ,window
если не включить строгий режим иthis
становитсяundefined
и выдаст ошибку. Область видимости - это нечто совершенно другое, и это не объект (за исключением глобальной области видимости, которая отражаетсяwindow
объектом)WebWorkers
(гдеself
относится к глобальной области видимости, так же, как в браузере, где он равенwindow
) и в Node.js, где указана нужнаяglobal
переменная. И это новее работает с локальными областями, такими как тело функции.const
используя этот метод?Javascript имеет
eval()
функцию для таких случаев:Изменить: Извините, я думаю, что снял вопрос слишком быстро. Это только даст вам переменную, чтобы установить ее вам нужно
или если используется строка:
Но я думаю, что есть более подходящий способ достичь того, что вы ищете? Я не думаю, что eval () - это то, что вы действительно хотите использовать, если нет веских причин для этого. Eval ()
источник
eval()
ответ был отклонен на удаление, а этот был отклонен?window[varname]
имеет побочный эффект от введения глобальных переменных, которые могут быть нежелательны. @Shaz Я не думаю, что вы даете современным переводчикам JS достаточное доверие. Они очень быстрые, и анализ и выполнение простой однострочной операции назначения не приведут к скачкам загрузки ЦП, если это не выполняется в таймере 1 мс или в замкнутом цикле.Насколько eval против глобальных переменных решений ...
Я думаю, что у каждого есть свои преимущества, но это действительно ложная дихотомия. Если вы параноидально относитесь к глобальному пространству имен, просто создайте временное пространство имен и используйте ту же технику.
Уверен, что вы можете получить доступ к нему как tempNamespace.myVarProperty (сейчас 5), избегая использования окна для хранения. (Строка также может быть помещена непосредственно в скобки)
источник
Скажи нет злому эвалу. Пример здесь: https://jsfiddle.net/Shaz/WmA8t/
источник
function aScope() { this[myString] = function() { alert("Hello!"); };};
this
- это не ссылка на локальную область видимости, а на объект, с которым связана функция во время вызова.Вы можете получить доступ к объекту окна как ассоциативный массив и установить его таким образом
источник
Метод window ['variableName'] работает ТОЛЬКО, если переменная определена в глобальной области видимости. Правильный ответ - «Рефакторинг». Если вы можете предоставить контекст «Объект», то возможно общее решение, но есть некоторые переменные, которые ни одна глобальная функция не может разрешить в зависимости от области действия переменной.
источник
Если вы пытаетесь получить доступ к свойству объекта, вы должны начать с области действия
window
и проходить через каждое свойство объекта, пока не дойдете до того, которое вам нужно. Предполагая, чтоa.b.c
это было определено где-то еще в скрипте, вы можете использовать следующее:Это будет работать для получения свойства любого объекта, независимо от его глубины.
источник
name
качестве имени переменной, ваш пример не удастся, но он работает с другими именами переменных. Это может иметь отношение к объекту Window, уже имеющемуname
переменную. Также в том числе.value
метод вызвал сбой. Возможность интерпретировать глубоко вложенные переменные объекта - это то, что я ищу, и ваш метод указывает правильное направление. Спасибо.Uncaught TypeError: Cannot read property 'split' of undefined
Вы можете сделать это
источник
Это можно сделать так
источник
Следующий код позволяет легко ссылаться на каждый из ваших DIV и других элементов HTML в JavaScript. Этот код должен быть включен непосредственно перед тегом, чтобы все элементы HTML были видны. За ним должен следовать ваш код JavaScript.
источник
позвольте мне сделать это более ясным
источник