因此,我正在研究jQuery源代码,因为我试图理解jQuery ajax成功回调中的“ this”的含义(由于deferred.resolveWith()方法,我发现它起作用)。

现在,我感到困惑的是,在查看代码时,我没有看到所调用的resolveWith()方法的实际定义。

源代码在这里,但是我已经完成了一个简单的文本搜索,以查找单词“ resolveWith”(在下面列出)的所有实例,这些实例似乎都是对根本不存在的方法的调用:https://code.jquery.com/jquery-2.2.1.js

换句话说,这是如何工作的,在哪里定义“ resolveWith”方法?

“ resolveWith”的实例

function resolveFunc( i ) {
    return function( value ) {
        args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
        if ( !( --count  )) {
                deferred.resolveWith( deferred, args );
            }
        };




if ( !count ) {
            deferred.resolveWith( deferred, args );
        }




    } else if ( deferred !== firstParam ) {
        deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
    }




function resolve() {
        if ( !( --count ) ) {
            defer.resolveWith( elements, [ elements ] );
        }
    }




// The ajax method's usage
if ( isSuccess ) {
    deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
} else {
    deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
}

最佳答案

它在line 87 of deferred.js中定义:

deferred[ tuple[ 0 ] + "With" ] = list.fireWith;


以及rejectWithnotifyWithfireWith函数是Callbacks实例的特权方法(请参见its docs here)。

通用性很好,但是您可以过度使用它:-)

10-04 16:11