我只是浏览$ .Deffered在jQuery中的文档,并遇到以下示例:
$.fn.bindOnce = function( event, callback ) {
var element = $( this[ 0 ] ),
defer = element.data( "bind_once_defer_" + event );
if ( !defer ) {
defer = $.Deferred();
function deferCallback() {
element.unbind( event, deferCallback );
defer.resolveWith( this, arguments ); // What is `this` and `arguments` here ?
}
element.bind( event, deferCallback )
element.data( "bind_once_defer_" + event , defer );
}
return defer.done( callback ).promise();
};
您可以看到相同的示例HERE,但是代码并不太复杂,但是有些事情并不太有意义,例如,请参见下面的代码片段:
function deferCallback() {
element.unbind( event, deferCallback );
defer.resolveWith( this, arguments );
}
该代码是非常标准的,尽管我不明白,但是上述代码中的
this
指的是什么?我不知道上面代码中所指的是什么。documentation对此方法也没说太多。
有人可以解释吗?我了解这是上下文,但是我不了解的是,在上面提到的代码片段中,这将指向什么?
我也无法理解在上面的代码片段中resolveWith到底扮演了什么角色。我唯一的猜测是
resolveWith()
导致执行以下代码行:return defer.done( callback ).promise();
我对此也不太确定。
最佳答案
无法理解上述片段中的resolveWith扮演什么部分
反正代码。
在linked page
该代码的工作方式如下:
检查元素是否已经为给定附加了延迟
事件
如果不是,请创建并创建它,以便在事件发生时解决
第一次开除
然后将给定的回调附加到延期并返回承诺.resolveWith()
可以在context
,this
.done()
回调中设置.fail()
,.notify()