动态添加参数

时间:2013-10-31 15:09:37

标签: javascript jquery

// set Process
i18n.setProcess(function() {diFunctions.getI18n('http://localhost/service/i18n/page?lang=eng&group=staff') });

// Setter and getter 
this.setProcess = function( opProcess ) {  //here param opProcess is function with parameters see i18n.setProcess() line of code
        if( opProcess == undefined) 
            throw "Process is undefined";
        if( $.isFunction(opProcess) == false )
            throw "Process is not a function"
             process = opProcess;

    };
    this.getProcess = function() {
        return process;
    };

了解i18n.setProcess如何将带有param的函数作为setProcess的参数传递。

现在我在SetProcess中想要的是function() {diFunctions.getI18n('http://localhost/service/i18n/page?lang=eng&group=staff',**id**) // id被动态添加到函数本身,该函数作为参数传递给setProcess

问题 - 除了函数参数(Url等等,id)之外,我想在set进程中动态添加id(在我的类变量中定义,总是可以通过id访问)。函数参数可以增长,但id最后应作为参数添加?

尝试了不少解决方案,但没有成功?查看here

1 个答案:

答案 0 :(得分:2)

这是arguments对象的用途..

function foo() {
    var lastArg = arguments.length ? arguments[arguments.length - 1] : 'default';
    return lastArg;
}

foo();     // "default"
foo(1);    // 1
foo(1, 2); // 2

如果你想编写一个类似于bind的函数,它只会在最后添加参数,那么你可以做

function appendArguments(fn) {
    var slice = Array.prototype.slice.call.bind(Array.prototype.slice),
        args = slice(arguments, 1);
    return function () {
        return fn.apply(this, slice(arguments).concat(args));
    };
}

现在

var bar = appendArguments(foo, 3);
bar();     // 3
bar(4, 5); // 3 (because it's calling `foo(4, 5, 3)`