Если у вас есть функция в переменной с именем x
и вы хотите вызвать эту функцию, есть несколько способов сделать это.
function doAlert(msg) {
alert(msg);
}
var x = doAlert;
x("hi");
x.call(this, "hi");
x.apply(this, arrayOfArguments);
См. здесь длябольше информации на .call()
.См. здесь для получения дополнительной информации о .apply()
.
Если у вас есть строка, представляющая имя функции, и вы хотите вызвать соответствующую глобальную функцию с этим именем, вы можете сделать это черезобъект окна.
function doAlert(msg) {
alert(msg);
}
var name = "doAlert";
window[name]("hi");
Также возможно, хотя и не рекомендуется, использовать eval
:
function doAlert(msg) {
alert(msg);
}
var name = "doAlert";
eval(name + '("hi");');
Вы задали этот вопрос в комментарии:
Скажем, у меня есть функция внутри functions.js с именем updateAll, у которой нет параметров ... в моем php мой json будет $data['function_name'] = 'updateAll'
;который будет закодирован с помощью json_encode () ... превратив его в obj.function_name, чтобы я не мог просто вызвать: obj.function_name ();и это работает?
Вот мой ответ на этот новый вопрос:
Я не уверен, что полностью понимаю ваш вопрос, но я постараюсь описать различные возможные аспекты вашего вопроса.
Если function_name
является переменной, вы не можете использовать obj.function_name()
.Этот синтаксис работает только для строковых констант (не переменных).
Если у вас есть имя метода в переменной, вы всегда можете сделать то же самое, что и точечная запись, используя []
, например: obj[function_name]();
Если имя функции находится в $data['function_name'] = 'updateAll'
и это имя функции на самом деле является методом объекта obj
, так что вы хотите вызвать obj.updateAll, тогда вы могли бы сделатьэто будет выглядеть так:
obj[$data['function_name']]();
Помните, что в Javascript, где бы вы ни использовали ссылку .x для имени, которое было известно заранее, вы можете использовать ссылку [x] для имени, котороенаходится в переменной.
Если (как вы разместили в комментарии), ваш JSON выглядел так:
{"response":"function","msg":"someFunction","attribs":{"id":"1","p_id":"2"}}
и этот JSON означал, что вы хотите вызвать функцию someFunction()
и передайте ему параметры в attribs, тогда есть несколько способов сделать это в зависимости от того, как вы хотите, чтобы аргументы передавались в функцию.Если вы хотите, чтобы аргументы передавались как объект attribs, вы бы сделали это следующим образом:
var data = {"response":"function","msg":"someFunction","attribs":{"id":"1","p_id":"2"}};
if (data.response == "function") {
data.msg(data.attribs);
}
Если вы хотите, чтобы аргументы передавались как обычные параметры с параметром id первым и параметром p_id, вторым, вы 'сделал бы это так:
var data = {"response":"function","msg":"someFunction","attribs":{"id":"1","p_id":"2"}};
if (data.response == "function") {
data.msg(data.attribs.id, data.attribs.p_id);
}