Строку переделать в переменную
Здравствуйте!
Функция ссылается на функцию. В вызове функции имя переменной задано в кавычках. Можно его прочитать как переменную? Попробую объяснить на примере.
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 должен начать выводить другое сообщение |
Наркоманы.
|
Цитата:
|
Я вообще не понимаю чем вы здесь страдаете. Нужный опу ответ я дал на первой странице.
|
Цитата:
Цитата:
|
Моё решение простое, приличное и адекватное. А эвалить где ни попадя и что ни попадяя - явно нет.
|
Цитата:
PS: либо ты не понял о чём речь, либо (что вероятнее) прикалываешься |
об этом речь?
<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'));
f();
}
}
</script>
|
| Часовой пояс GMT +3, время: 14:01. |