Jump to content
  • 0

Запуск функции по переменной


iillyyaa2
 Share

Question

название темы не смог придумать...

такой вариант работает:

<script>
function dd() {
alert(7);
}
var xx = 'dd';
window[xx]();
</script>

но хочется усложнить задачу

такой вариант тоже работает:

<script>
var jj = {};
jj.aa = function() {
alert(5);
};
var xx = jj.aa;
xx();
</script>

а этот код не работает:

<script>
var jj = {};
jj.aa = function() {
alert(5);
};
var xx = jj.aa;
window[xx]();
</script>

вот как заставить данный код работать?

(я знаю, что вызываю не правильно, привёл для примера, как правильно я и хочу узнать)

всё, додумал

eval(xx());

ну и как вариант, на случай разных данных:

if (window[xx]) { window[xx](); } else { eval(xx()); }

Edited by iillyyaa2
Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

и не запустится, потому что xx нет в объекте window - смотри сам - http://jsfiddle.net/SJG6j/

но если ты объявишь переменную без var, тогда всё работает - смотри - http://jsfiddle.net/6gbkX/

P.S.: а eval() - это плохо! Почему? Читай здесь (первым пунктом)

Edited by DrStrangeLove
Link to comment
Share on other sites

  • 0

блин, у меня сложнее задача то...

<script>
var jj = {};
jj.aa = function() {
alert(5);
};
var xx = 'jj.aa';
eval(xx());
</script>

переменная НЕ содержит ссылку, а всего лишь имя...

peremennn[1] = 'jj.aa';

Edited by iillyyaa2
Link to comment
Share on other sites

  • 0

блин, у меня сложнее задача то...

<script>
var jj = {};
jj.aa = function() {
alert(5);
};
var peremennn = new Array();
peremennn[0] = 17;
peremennn[1] = 'jj.aa';
if (window[peremennn[1]]) { window[peremennn[1]](); } else { eval(peremennn[1]()); }
</script>

переменная НЕ содержит ссылку, а всего лишь имя...

peremennn[1] = 'jj.aa';

Ты пытаешься вызвать window['jj.aa'] , как если бы это было имя глобальной функции - как будто jj.aa - глобальная функция..

на самом деле такой функции нет, а есть метод aa у объекта jj..

Поэтому не проходит.. ты обращаешься к несуществующей функции - которой нет в Window объекте..

Link to comment
Share on other sites

  • 0

придумал:

<script>
var jj = {};
jj.aa = function() {
alert(5);
};
xx = 'jj.aa';
xx = eval(xx);
window.xx();
</script>

или:

<script>
var jj = {};
jj.aa = function() {
alert(5);
};
xx = 'jj.aa';
eval(eval(xx)());
</script>

не ругайся, что тут 2 eval аж :)

есть альтернатива ? :)

А зачем тебе обязательно строка 'jj.aa'??

Можно, ведь, проще так - http://jsfiddle.net/bxJ3c/

Link to comment
Share on other sites

  • 0

у меня именно строка, она приходит в скрипт

заодно и такой код работает:

<script>
function dd() {
alert(7);
}
var xx = 'dd';
eval(eval(xx)());
</script>

главное, что бы любая функция запустилась..

А зачем обязательно делать вызов в контексте Window??

Link to comment
Share on other sites

  • 0

хорошо, значение переменной, приходит по json

Если приходит по JSON, тогда во всех современных браузерах есть объект JSON:

JSON.parse() - метод, превращающий JSON строку в JS объект.

JSON.stringify() - метод, превращающий JS объект в JSON строку.

Можешь просто использовать JSON.parse() вместо eval()!

Edited by DrStrangeLove
Link to comment
Share on other sites

  • 0

у меня по своему разбор идёт чуть, но роли это не меняет

разве JSON.parse() не строковую переменную создаст ??

var ob = {'xx':'jj.aa'};

тут ведь так же строковая переменная будет, а не ссылка

или я что то не догоняю ?

Link to comment
Share on other sites

  • 0

у меня по своему разбор идёт чуть, но роли это не меняет

разве JSON.parse() не строковую переменную создаст ??

var ob = {'xx':'jj.aa'};

тут ведь так же строковая переменная будет, а не ссылка

или я что то не догоняю ?

А как вообще целиком выглядит принятая JSON строка??

В ней есть код метода aa??

Link to comment
Share on other sites

  • 0

а чем та, что я привёл строку не подходит ?

код метода написан в каком ни будь .js файле как и куча других, через json приходят некие данные и может прийти имя функции, которую надо запустить.

jj.aa = function() {
alert(5);
};

этот код где то ранее написан, приходит только имя, что надо запустить.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy