因此,我正在研究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;
以及
rejectWith
和notifyWith
。 fireWith
函数是Callbacks
实例的特权方法(请参见its docs here)。通用性很好,但是您可以过度使用它:-)