29.09.2012, 11:05
|
Новичок на форуме
|
|
Регистрация: 29.09.2012
Сообщений: 3
|
|
Строку переделать в переменную
Здравствуйте!
Функция ссылается на функцию. В вызове функции имя переменной задано в кавычках. Можно его прочитать как переменную? Попробую объяснить на примере.
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();//--так вывожу весь этот винегрет.
|
|
29.09.2012, 11:16
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,584
|
|
для глобальных: window[thchto]
__________________
29375, 35
|
|
29.09.2012, 11:32
|
Новичок на форуме
|
|
Регистрация: 29.09.2012
Сообщений: 3
|
|
Спасибо! Но что-то не так понял я, наверное. Делаю так, но не работает:
function vyvod(tchto){
tchto2=window[thchto];
itog='делай '+tchto2;
document.write (itog+'<br>');
};
|
|
29.09.2012, 12:04
|
Новичок на форуме
|
|
Регистрация: 29.09.2012
Сообщений: 3
|
|
Блин, неправильно написал, не "thchto", а "tchto". Ура! работает! Спасибо!
|
|
29.09.2012, 14:55
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
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>
Последний раз редактировалось bes, 29.09.2012 в 15:03.
|
|
29.09.2012, 15:29
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от Maxmaxmахimus
|
bes,
че ты несешь наркоман)))?
|
По примеру не понятно, что требуется, пояснить?
|
|
01.10.2012, 11:50
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от Maxmaxmахimus
|
ты обращаешься ко мне и показываешь более приличный метод СДЕЛАТЬ ЧТО??? Чел попросил как обращаться к переменной если её имя лежит в другой переменной в виде строки, я показал как, а ты какую то херню показал.
Какие то онклики html зачем-то создал, ты походу тредом ошибся.
|
я ничего не показывал ТС, это был вопрос (в конце предложения стоит знак вопроса), сам завёл речь об eval
Сообщение от Maxmaxmахimus
|
eval( itog + "='делай '+" + tchto )
|
не догнал
моя мысль для замены кода в функции: привести к строке, сделать замену, убрать лишнее ('function имя {' и последнюю скобку '}'), исполнить при помощи eval
|
|
01.10.2012, 19:51
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от Maxmaxmахimus
|
И че за бред? а если там замыкание? и тебе не кажется что это более рерурсоемко и бессмысленно чем просто ивалить динамически сгенерированный код в контексте вызванной функции?
|
звучит красиво
в данном случае замыканий нет
на моём тестовом примере можешь показать как это будет выглядеть на практике: alert должен начать выводить другое сообщение
|
|
01.10.2012, 19:52
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,584
|
|
Наркоманы.
__________________
29375, 35
|
|
01.10.2012, 20:05
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от Aetae
|
Наркоманы.
|
Aetae, ты там рядом с Maxmaxmахimus-ом сидишь, спроси может ли он в код обратить свои слова
|
|
|
|