2015-07-12 3 views
0

я просто проходящие через документации $ .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 не очень много говорит об этом методе тоже.

может кто-нибудь объяснить? Я понимаю, что это контекст, но я не понимаю, что в фрагменте кода, о котором я упомянул выше, что это будет указывать?

Кроме того, я не понимаю, какую часть resolWith играет в приведенном выше фрагменте кода в любом случае. мое единственное предположение, что resolveWith() приводит к исполнению ниже строки кода:

return defer.done(callback).promise(); 

снова я не слишком уверен в этом.

ответ

1

не понимает, какую часть resolWith играет в приведенном выше фрагменте код в любом случае.


В linked page

код работает следующим образом:

  • Проверьте, если элемент уже отложенное прилагается к данному событию

  • если нет, создать его и сделать так, чтобы он был разрешен, когда событие выстрелил в первый раз вокруг

  • затем прикрепить данную функцию обратного вызова для отсроченных и вернуть обещание


.resolveWith() может установить context, this в .done(), .fail().notify() обратных вызовов

1

что это будет указывать?

Я считаю, что они предназначены для this ключевого слова, чтобы указать на элемент (ы), который $.fn.bindOnce был прикован против, но в настоящее время ссылаются в новой функции, которая не будет иметь один и тот же объем.

Вы можете сказать deferCallback, что это this должно быть, хотя с .bind():

// use `.bind()` to set the `this` keyword in 
// deferCallback to the `this` in bindOnce 
element.bind(event, deferCallback.bind(this)); 

В настоящее время, без .bind()this будет window.

Смежные вопросы