jQuery.proxy中的第三个参数用于什么?

The*_*meZ 3 javascript jquery

在jQuery API doc中,jQuery.proxy函数用法:

jQuery.proxy( function, context )
Run Code Online (Sandbox Code Playgroud)


function将更改其上下文的函数.
context应该设置函数的上下文(this)的对象.

jQuery.proxy( context, name )
Run Code Online (Sandbox Code Playgroud)


context应设置函数上下文的对象.
name将更改其上下文的函数的名称(应该是上下文对象的属性).

proxy : function(fn, proxy, thisObject){
    if ( arguments.length === 2 ) {
        if (typeof proxy === "string" ) {
        thisObject = fn;
        fn = thisObject[proxy];
        proxy = undefined;
    } else if ( proxy && !jQuery.isFunction( proxy ) ) {
        thisObject = proxy;
        proxy = undefined;
    }
}
   if ( !proxy && fn ) {
   proxy = function() {
   return fn.apply( thisObject || this, arguments );
   };
}
// So proxy can be declared as an argument
return proxy;
}
Run Code Online (Sandbox Code Playgroud)

但是当我研究jQuery源代码时,函数代理.我发现声明了3个参数.

所以我想知道第三个参数的用途是什么,无法理解代码:(

我编写了一个代码段来测试函数.

var someObj = { somefnc : function() {} };
function fnc() {
    this.somefnc();
    console.log(arguments);
}
var proxyedFnc = jQuery.proxy(fnc, undefined, someObj, "arg1","arg2");
proxyedFnc();
//output: []
Run Code Online (Sandbox Code Playgroud)

我想知道为什么这些论点没有传递给fnc ..

Dav*_*ing 6

xdazz是对的,最新的1.7.2版本有不同的语法,它还允许将多个额外的参数连接到apply并传递给代理函数f.ex:

?var fn = function() {
    console.log(this.foo, arguments);
};

var obj = {
    foo: 'bar'
};

$.proxy(fn, obj, 'one', 'two')();
Run Code Online (Sandbox Code Playgroud)

运行此代码将打印 bar ["one", "two"]

你会得到相同的结果:

$.proxy(fn, obj)('one', 'two');
Run Code Online (Sandbox Code Playgroud)

我还可以补充一点,官方API中没有记录这一点,因此在不同版本中,"引擎盖下"可能会有所不同.此代码在1.7.2中进行了测试.