Si desea utilizar las funciones globales y variables dinámicamente puede utilizar:¿Cómo puedo acceder al ámbito local dinámicamente en javascript?
window[functionName](window[varName]);
¿Es posible hacer lo mismo para las variables en el ámbito local?
Este código funciona correctamente pero actualmente usa eval y estoy tratando de pensar en qué otra manera hacerlo.
var test = function(){
//this = window
var a, b, c; //private variables
var prop = function(name, def){
//this = window
eval(name+ ' = ' + (def.toSource() || undefined) + ';');
return function(value){
//this = test object
if (!value) {
return eval('(' + name + ')');
}
eval(name + ' = value;')
return this;
};
};
return {
a:prop('a', 1),
b:prop('b', 2),
c:prop('c', 3),
d:function(){
//to show that they are accessible via to methods
return [a,b,c];
}
};
}();
>>>test
Object
>>>test.prop
undefined
>>>test.a
function()
>>>test.a()
1 //returns the default
>>>test.a(123)
Object //returns the object
>>>test.a()
123 //returns the changed private variable
>>>test.d()
[123,2,3]
Entiendo por qué estaba confundido ahora, es porque está nombrando las variables abc ASÍ COMO los nombres para la devolución. Deberías cambiar esos nombres, eso es lo que me estaba confundiendo. De todos modos, mejores respuestas que las mías han aparecido, así que voy a diferir a la media luna en este momento. –
@Gothdo La pregunta a la que se vincula es preguntar algo diferente. Las variables a las que intenta acceder son variables globales. La respuesta aceptada también usa variables globales. La pregunta vinculada debe ser cambiada. – Annan