Как и в PHP, мне нужна переменная переменная.
Я получаю тип данных из html, и эта переменная на самом деле является функцией в js-коде.
И я понимаю, мне нужно это назвать. Каждый раз, когда он отличается, поэтому я не знаю, какой именно.
if (e.which == 114 || e.which == 116) {
var action = $('.active').data("action");
action();
}
function testing() {
alert('yes');
}
Здесь имя функции тестируется. И переменное действие удерживает его. Как я могу это назвать? Я помню, что для этого был простой синтаксис, но я не могу его найти. благодаря
Это зависит от объекта, который удерживает функцию. Для глобальной области использования: 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"
Вы можете извлечь значение и использовать 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);
});
});
testing
входит в глобальную сферу, вы можете сделатьwindow[action]()
, но я действительно предлагаю вам пересмотреть свою логику. «переменные переменные» не существуют в JS, и они в любом случае являются плохой практикой в PHP.