2010-05-21 6 views
0

можно вызвать динамический метод в javascript. то есть предположим, у меня есть в моей странице 2 методы, как, например:вызов динамической функции в javascript

function id1_add() 
{ 
    return 1; 
} 

function id2_add() 
{ 
    return 2; 
} 

я также имеют эту функцию:

function add() 
{ 
    var s1='id1'; 

    s1+'_add()'; //??? 
} 

является возможность вызова, например id1_add() в таких:

s1+'_add()'; 

поэтому вызов метода зависит от предыдущей строки?

ответ

-1

Помимо метода Тима вы также можете использовать eval(s1+'_add()');.

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

См When is JavaScript's eval() not evil?

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

3

В конкретном случае функции, объявленной в глобальном масштабе только, вы можете сделать

window[s1 + "_add"](); 

Примечание это не будет работать для вложенных функций. Это также зависит от глобального объекта, который отображается на window, что имеет место во всех браузерах, доступных для сценариев.

+1

+1 менее ужасно, чем 'eval'. Но в любом случае это запах кода. Может быть предпочтительным явный поиск имен функций. – bobince

+0

Да. Я лениво опустил «ты уверен, что должен делать это?» немного. –

+0

@bobince: 'eval' не обязательно ужасно. Это зависит от того, как вы его используете (см. Обсуждение в моем ответе). – nico

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