Вы не можете получить доступ к произвольной локальной переменной по имени строки без eval.Так что, если вы не хотите изменить способ доступа к этим переменным из другого кода внутри функции app
, вам придется придерживаться eval (как бы ужасно это не казалось).
Если нас другой стороны, вы готовы изменить код внутри функции app()
, которая обращается к somevar1
и somevar2
, тогда у вас есть варианты.Обратите внимание, что вам не нужно ничего менять за пределами функции app()
, потому что вы можете сохранить тот же контракт для функции .get()
, так что это не один из тех случаев, когда произвольно трудно найти все возможные места в проекте, которые могли быполучать доступ к этим переменным.Из-за того, как они объявлены в настоящее время, доступ к ним возможен только непосредственно из функции app()
, поэтому ваш поиск / замена будет ограничен этой областью.
Если все нормально, чтобы переменные были свойствамиваш объект, вы можете сделать это:
var app = function(fw) {
this.somevar1 = "hello";
this.somevar2 = "world";
this.get = function(what) {
return this[what];
}
};
var app = new App({some: "thing"});
// now for the use:
console.log(app.get("somevar1"));
console.log(app.somevar1);
console.log(app["somevar1"]);