He buscado soluciones, pero no pude encontrar ninguna que funcione.
Tengo una variable llamada onlyVideo
.
"onlyVideo"
la cadena se pasa a una función. Quiero establecer la variable onlyVideo
dentro de la función como algo. ¿Cómo puedo hacer eso?
(Hay una serie de variables que podrían llamarse a la función, por lo que necesito que funcione dinámicamente, no if
declaraciones codificadas ).
Editar: Probablemente haya una mejor manera de hacer lo que intentas hacer. Lo pregunté al principio de mi aventura de JavaScript. Mira cómo funcionan los objetos JavaScript.
Una simple introducción:
// 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
fuente
fuente
Respuestas:
Si es una variable global, entonces
window[variableName]
o en su casowindow["onlyVideo"]
debería hacer el truco.fuente
scope[property]
o inclusothis[property]
this
es el contexto, lo que apunta depende de cómo se llama la función. En JS, el 50% del tiempothis
es awindow
menos que habilite el modo estricto y sethis
conviertaundefined
y arroje un error. El alcance es algo completamente diferente y no es un objeto (excepto el alcance global que refleja elwindow
objeto)WebWorkers
(donde seself
refiere al alcance global, tal como lo hace en el navegador, donde es igual awindow
) y Node.js, dondeglobal
está la variable que desea. Y más reciente funciona con ámbitos locales, como el cuerpo de la función.const
uso de este método?Javascript tiene una
eval()
función para tales ocasiones:Editar: Lo siento, creo que leí la pregunta demasiado rápido. Esto solo te dará la variable, para configurarla necesitas
o si usa una cadena:
Pero me imagino que hay una manera más apropiada de lograr lo que estás buscando. No creo que eval () sea algo que realmente quieras usar a menos que haya una buena razón para ello. eval ()
fuente
eval()
rechazó una respuesta a eliminación, y esta se votó a favor?window[varname]
tiene el efecto secundario de introducir variables globales, que podrían no ser deseadas. @ Shaz No creo que le des suficiente crédito a los intérpretes modernos de JS. Son extremadamente rápidos, y analizar y ejecutar una operación simple de asignación de una línea no aumentará el uso de la CPU de nadie, siempre que no se realice en un temporizador de 1 ms o en un bucle cerrado.En cuanto a las soluciones eval vs. globales variables ...
Creo que hay ventajas para cada uno, pero esto es realmente una falsa dicotomía. Si eres paranoico del espacio de nombres global, solo crea un espacio de nombres temporal y usa la misma técnica.
Bastante seguro de que podría acceder como tempNamespace.myVarProperty (ahora 5), evitando usar la ventana para el almacenamiento. (La cadena también se puede poner directamente entre los corchetes)
fuente
Di no al malvado eval. Ejemplo aquí: https://jsfiddle.net/Shaz/WmA8t/
fuente
function aScope() { this[myString] = function() { alert("Hello!"); };};
this
no hace referencia al ámbito local, sino al objeto al que está vinculada la función durante la llamada.Puede acceder al objeto de ventana como una matriz asociativa y configurarlo de esa manera
fuente
El método de la ventana ['variableName'] SOLO funciona si la variable se define en el ámbito global. La respuesta correcta es "Refactor". Si puede proporcionar un contexto de "Objeto", existe una posible solución general, pero hay algunas variables que ninguna función global podría resolver en función del alcance de la variable.
fuente
Si está intentando acceder a la propiedad de un objeto, debe comenzar con el alcance de
window
y recorrer cada propiedad del objeto hasta llegar al que desea. Suponiendo quea.b.c
se haya definido en otra parte del script, puede usar lo siguiente:Esto funcionará para obtener la propiedad de cualquier objeto, sin importar cuán profundo sea.
fuente
name
como nombre de variable, su ejemplo falla, pero funciona con otros nombres de variables. Esto puede tener que ver con el objeto Window que ya tiene unaname
variable. Además, incluir el.value
método causó fallas. La capacidad de interpretar variables de objeto profundamente anidadas es lo que estoy buscando y su método indica una buena dirección. Gracias.Uncaught TypeError: Cannot read property 'split' of undefined
Puedes hacer asi
fuente
Se puede hacer así
fuente
El siguiente código facilita la referencia a cada uno de sus DIV y otros elementos HTML en JavaScript. Este código debe incluirse justo antes de la etiqueta, de modo que se hayan visto todos los elementos HTML. Debería ir seguido de su código JavaScript.
fuente
déjame aclararlo
fuente