Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как выполнить метод в виде переменной (https://javascript.ru/forum/misc/41496-kak-vypolnit-metod-v-vide-peremennojj.html)

HJ90 16.09.2013 17:12

Как выполнить метод в виде переменной
 
Здравствуйте!
Подскажите пожалуйста, как можно выполнить вот такое?
Здесь у меня undefined:
val = 'HeLLo WOrld';
exp = "replace(/s*/g,'-')"
alert(val[exp])


В плагине пользователь передает текст и шаблон поиска в JS и получает результат.
То есть нужно сложить конструкцию из двух переменных: text + method
статический вариант такой:
val = 'HeLLo WOrld';
rusult = val.replace(/s*/g,'-')
alert(rusult)

Перечитал много документации, но никак не получается...
А вот если с именем функции - получается.
Спасибо!

ruslan_mart 16.09.2013 17:27

eval('val.' + exp);

HJ90 16.09.2013 17:41

Цитата:

Сообщение от Ruslan_xDD (Сообщение 272464)
eval('val.' + exp);

Спасибо Ruslan_xDD!
А есть возможность обойтись без eval?

Яростный Меч 16.09.2013 17:42

Цитата:

Сообщение от HJ90
А есть возможность обойтись без eval?

в данной постановке вопроса - нет.
вот если юзер будет присылать только регекс (и строку для замены), то легко.

ruslan_mart 16.09.2013 17:48

HJ90, есть, можно так.

var val = 'HeLLo WOrld';
var ex = "replace(/s*/g,'-')";

var test = new Function('return val.' + ex + ';');
alert( test() );

HJ90 16.09.2013 17:57

Цитата:

Сообщение от Ruslan_xDD (Сообщение 272471)
HJ90, есть, можно так.

О, то что надо!
Ruslan_xDD, большое Вам спасибо!! :)

Яростный Меч 16.09.2013 17:58

Цитата:

Сообщение от Ruslan_xDD
new Function

оное выполняется "в глобальном контексте", переменные внутри scope не видит.
можно так:
var val = 'HeLLo WOrld';
var ex = "replace(/s*/g,'-')";
 
var _test = new Function('val,ex', 'return val.' + ex + ';');
var test = function() { return _test(val,ex); };
alert( test() );

ruslan_mart 16.09.2013 18:00

Яростный Меч, странно, только что тестил - всё работает.

Яростный Меч 16.09.2013 18:26

Цитата:

Сообщение от Ruslan_xDD
только что тестил - всё работает.

http://jsfiddle.net/jWhJJ/ и http://jsfiddle.net/Supa2/ - найди отличие :)

HJ90 16.09.2013 22:27

А как понимать такую запись "Function" ?
Первый раз такое вижу...

аа, блин ..все ок


Часовой пояс GMT +3, время: 05:12.