Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I access local scope dynamically in javascript?

Tags:

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] 
like image 665
AnnanFay Avatar asked Feb 28 '09 23:02

AnnanFay


1 Answers

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.

like image 163
Crescent Fresh Avatar answered Sep 20 '22 19:09

Crescent Fresh