我只是浏览$ .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()可以在contextthis .done()回调中设置.fail().notify()

10-06 04:15