Строку переделать в переменную
Здравствуйте!
Функция ссылается на функцию. В вызове функции имя переменной задано в кавычках. Можно его прочитать как переменную? Попробую объяснить на примере. var raz='раз';//--переменные, которые читаю var dva='два'; function vyvod(tchto){//--обработчик itog='делай '+tchto; document.write (itog+'<br>'); }; function navyvod(){//--вызываю обработчик, в который посылаю переменные vyvod(raz);vyvod(dva)//--здесь все работает как надо. Но проблема в том, что запись идет vyvod('raz');vyvod('dva'), т.е. с кавычками. Как такой текст "raz и dva" в обработчике прочитать как переменные "raz и dva"? }; navyvod();//--так вывожу весь этот винегрет. |
для глобальных: window[thchto]
|
Спасибо! Но что-то не так понял я, наверное. Делаю так, но не работает:
function vyvod(tchto){ tchto2=window[thchto]; itog='делай '+tchto2; document.write (itog+'<br>'); }; |
Блин, неправильно написал, не "thchto", а "tchto". Ура! работает! Спасибо!
|
Maxmaxmахimus, есть более приличный способ сделать замену в функции (с учётом того, что вручную код функции f() никак поменять, вариант со сменой обработчика подобной функцией в расчёт не берём, то есть нужно получить новую функцию из старой путём некоторых замен в старой)?
<button>click</button> <button>change</button> <script> function f() { if (true) { alert('old'); } } var childs = document.body.children; childs[0].onclick = f; childs[1].onclick = function () { childs[0].onclick = function () { eval(f.toString().replace ('old', 'new').replace('function f() {', '').replace(/}$/, '')); } } </script> |
Цитата:
|
Цитата:
Цитата:
моя мысль для замены кода в функции: привести к строке, сделать замену, убрать лишнее ('function имя {' и последнюю скобку '}'), исполнить при помощи eval |
Цитата:
в данном случае замыканий нет на моём тестовом примере можешь показать как это будет выглядеть на практике: alert должен начать выводить другое сообщение |
Наркоманы.
|
Цитата:
|
Часовой пояс GMT +3, время: 17:07. |