2015-10-01 1 views
-6

Я хотел бы знать, существует ли метод использования имени переменной вместо функции. То есть,Как использовать переменную вместо имени функции в JavaScript

function dialog(a,b) { 
    a(b); 
} 

Пример: Если пользователь проходит 'alert' к a и содержание в b. Затем он должен предупредить b.

Если a - 'confirm', то оно должно подтвердить b.

Я могу использовать корпус переключателя или, если хотите, но я хотел бы знать, что это возможно.

+0

О, о. Я неправильно понял ваш вопрос. Моды: Пожалуйста, игнорируйте флаг. – bwDraco

+0

Вы передаете строки '' alert'' и '' confirm'', или функции 'alert' и' confirm'? Последний работает отлично - то есть «диалог (alert,« hello world »).' Alert и 'confirm' также работают. Я определенно не буду использовать решение 'eval'. – caasjj

+0

Другим вариантом является 'dialog ('alert', 'Hello World')' и 'window [a] (b);'. – Xufox

ответ

1

Использование .call()

function callme(a,b){ 
    return a.call(null, b); 
}; 

var func = function(c) { 
    return c; 
}; 

alert(callme(func, "test")); 

Любая функция вы передаете callme будет выполнять там. Первый аргумент - это контекст, поэтому вы можете пройти this, если вам нужно. Pass null в противном случае.

В вашем случае может быть передано предупреждение/подтверждение. Если вам не нужно что-то возвращать, просто сделайте пустое возвращение в конце.

Не используйте eval, потому что любовь ко всему хороша.

1

Я думаю, что вы ищете eval() method, однако это может привести к insecurities, если вы не будете осторожны.

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

function(a, b) { 
    eval(a + '(' + b + ')'); 
} 
+2

Что не так с 'dialog (alert, 'Hello World')'? – caasjj

+0

@caasjj Ум ... кроме его не существует? Если вы можете сослаться на статью MDN или какую-либо другую документацию, я с удовольствием прочитаю ее. –

+0

Извините, что не существует? Он определяет функцию 'dialog',' alert' является глобальным, а другой параметр - строкой. BTW, ваше решение является синтаксической ошибкой Javascript :) – caasjj

Смежные вопросы