JSON со значением функции с параметрами - PullRequest
5 голосов
/ 24 ноября 2011

У меня очень маленькая проблема, но я не знаю, как ее решить. Мне нужно отправить JSON с функцией, но с параметрами, и это моя проблема.

Отправка функции в JSON проста:

var jsonVariable = { var1 : 'value1', var2 : 'value2', func: function(){ alert('something'); } };

Мне нужно что-то еще, нужно передать функцию func как параметр с параметрами.

Пример:

var jsonVariable = { var1 : 'value1', var2 : 'value2', func: funcParam(param1,param2) };
function(parameter1, parameter2){
     alert(parameter1 + parameter2);
}

Но это не работает: (

Любая помощь в этом будет действительно оценена

Ответы [ 4 ]

1 голос
/ 24 ноября 2011

Вы хотите, чтобы в функцию можно было передавать любое количество параметров?Если это так, попробуйте передать массив в вашу функцию и выполнить итерацию, например:

var jsonVariable = {
    var1 : 'value1',
    var2 : 'value2',
    func: function(params){
        var alertString = "";
        for (var i = 0; i < params.length; i++)
            alertString+=params[i]+" ";
        alert(alertString);
    }
};

и вызвать его, используя

jsonVariable.func(["param1", "param2"]);

Fiddle

1 голос
/ 24 ноября 2011

Немного неясно, что вы хотите, но если вы хотите определить функцию, которая принимает параметры, вам нужно что-то вроде этого;

var jsonVariable = { var1 : 'value1', var2 : 'value2', func: function(param1, param2){ alert(param1 + param2); } };
0 голосов
/ 07 сентября 2012

Взгляните на плагин JSONfn .

http://www.eslinstructor.net/jsonfn/

Он делает именно то, что вам нужно.

-Vadim

0 голосов
/ 24 ноября 2011

Вы можете создать функцию, которая закрыла эти аргументы:

var send_func = (function( param1, param2 ) {
    return function(){
        alert(param1 + param2);
    };
}( 3, 4 ));

var jsVariable = { var1 : 'value1', var2 : 'value2', func: send_func };

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

another_func( jsVariable );

function another_func( obj ) {

    obj.func();  // 7

}

Конечно, это не имеет ничего общего с JSON. Вы не сможете сериализовать какую-либо часть функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...