Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Строку переделать в переменную (https://javascript.ru/forum/misc/32001-stroku-peredelat-v-peremennuyu.html)

АйОй 29.09.2012 11:05

Строку переделать в переменную
 
Здравствуйте!

Функция ссылается на функцию. В вызове функции имя переменной задано в кавычках. Можно его прочитать как переменную? Попробую объяснить на примере.

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();//--так вывожу весь этот винегрет.

Aetae 29.09.2012 11:16

для глобальных: window[thchto]

АйОй 29.09.2012 11:32

Спасибо! Но что-то не так понял я, наверное. Делаю так, но не работает:

function vyvod(tchto){

tchto2=window[thchto];

itog='делай '+tchto2;
document.write (itog+'<br>');

};

АйОй 29.09.2012 12:04

Блин, неправильно написал, не "thchto", а "tchto". Ура! работает! Спасибо!

bes 29.09.2012 14:55

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:29

Цитата:

Сообщение от Maxmaxmахimus
bes,
че ты несешь наркоман)))?

По примеру не понятно, что требуется, пояснить?

bes 01.10.2012 11:50

Цитата:

Сообщение от Maxmaxmахimus
ты обращаешься ко мне и показываешь более приличный метод СДЕЛАТЬ ЧТО??? Чел попросил как обращаться к переменной если её имя лежит в другой переменной в виде строки, я показал как, а ты какую то херню показал.

Какие то онклики html зачем-то создал, ты походу тредом ошибся.

я ничего не показывал ТС, это был вопрос (в конце предложения стоит знак вопроса), сам завёл речь об eval

Цитата:

Сообщение от Maxmaxmахimus
eval( itog + "='делай '+" + tchto )

не догнал

моя мысль для замены кода в функции: привести к строке, сделать замену, убрать лишнее ('function имя {' и последнюю скобку '}'), исполнить при помощи eval

bes 01.10.2012 19:51

Цитата:

Сообщение от Maxmaxmахimus
И че за бред? а если там замыкание? и тебе не кажется что это более рерурсоемко и бессмысленно чем просто ивалить динамически сгенерированный код в контексте вызванной функции?

звучит красиво :)

в данном случае замыканий нет

на моём тестовом примере можешь показать как это будет выглядеть на практике: alert должен начать выводить другое сообщение

Aetae 01.10.2012 19:52

Наркоманы.

bes 01.10.2012 20:05

Цитата:

Сообщение от Aetae
Наркоманы.

Aetae, ты там рядом с Maxmaxmахimus-ом сидишь, спроси может ли он в код обратить свои слова


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