If you want to use global functions and variable dynamically you can use:
window[functionName](window[varName]);
Is it possible to do the same thing for variables in the local scope?
This code works correctly but currently uses eval and I'm trying to think of how else to do it.
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]
To answer your question, no, there is no way to do dynamic variable lookup in a local scope without using eval()
.
The best alternative is to make your "scope" just a regular object [literal] (ie, "{}"
), and stick your data in there.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With