Вызов переменной переменной как функции в jquery

0

Как и в PHP, мне нужна переменная переменная.

Я получаю тип данных из html, и эта переменная на самом деле является функцией в js-коде.

И я понимаю, мне нужно это назвать. Каждый раз, когда он отличается, поэтому я не знаю, какой именно.

if (e.which == 114 || e.which == 116) {
    var action = $('.active').data("action");    
    action();
}

function testing() {
    alert('yes');
} 

Здесь имя функции тестируется. И переменное действие удерживает его. Как я могу это назвать? Я помню, что для этого был простой синтаксис, но я не могу его найти. благодаря

  • 0
    Если testing входит в глобальную сферу, вы можете сделать window[action]() , но я действительно предлагаю вам пересмотреть свою логику. «переменные переменные» не существуют в JS, и они в любом случае являются плохой практикой в PHP.
  • 0
    Это не работает .. Основная идея состоит в том, чтобы избежать этого, если (action == 'player_select') {player_select (); } Где функций будет больше 10-15
Показать ещё 1 комментарий
Теги:

2 ответа

0

Это зависит от объекта, который удерживает функцию. Для глобальной области использования: window[action](). В противном случае замените window на имя вашего объекта: myObject[action](). Однако это решение не подходит для функций, объявленных в частной области:

function f(fnName) {
    function a() { alert('a') };
    function b() { alert('b') };
    fnName(); // error
}

В этом случае вы можете использовать eval следующим образом ( сохранить контроль над входами ):

function f(fnName) {
    function a() { alert('a') };
    function b() { alert('b') };
    eval(fnName)();
}

В противном случае вы можете обернуть их внутри объекта следующим образом:

function f(fnName) {
    var wrapper = {};
    wrapper.a = function () { alert('a') };
    wrapper.b = function () { alert('b') };
    wrapper[fnName]();
}

f('a'); // alerts "a"
f('b'); // alerts "b"
0

Вы можете извлечь значение и использовать eval().

<div id="something" data-action="alert('test')">SOME DIV</div>

$(document).ready(function() {
    var $myObject = $("#something");
    var action = $myObject.data('action');
    $myObject.click(function() {
        eval(action);
    });    
});

Попробуйте сами на jsfiddle

Однако, eval - зло

Ещё вопросы

Сообщество Overcoder
Наверх
Меню