Путеводитель по плагину jQuery - PullRequest
4 голосов
/ 12 августа 2011

Я должен что-то упустить.Учебник по плагину jQuery найден здесь , в разделе «Пространство имен» -> «Методы плагина» скрывается нижеприведенное объявление плагина.То, что я не получаю здесь, является scope переменной method ;Я имею в виду, не должны ли методы быть определены как var во всплывающей подсказке?Как только эта анонимная функция выполняется, методов выходит из области видимости, если я правильно понимаю, потому что она определена как переменная внутри функции.Почему всплывающая подсказка ссылается на методы var, которые при вызове всплывающей подсказки выходят за рамки?Чего мне не хватает?

(function( $ ){

  var methods = {
    init : function( options ) { // THIS },
    show : function( ) { // IS   },
    hide : function( ) { // GOOD },
    update : function( content ) { // !!! }
  };

  $.fn.tooltip = function( method ) {

    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    

  };

})( jQuery );

Ответы [ 3 ]

7 голосов
/ 12 августа 2011

Функция, присвоенная $.fn.tooltip, представляет собой замыкание [Википедия] и, следовательно, имеет доступ ко всем более высоким областям действия.

Когда возвращается внешняя функция, methods не уничтожается, потому что замыкание все еще ссылается на нее.

1 голос
/ 12 августа 2011

Он не выходит за рамки точно, так как ваш плагин все еще содержит ссылку на него. В JS они называются замыканиями .

0 голосов
/ 12 августа 2011

Это все работает из-за закрытия. Функция, на которую указывает $.fn.tooltip, фактически является замыканием. Таким образом, он имеет доступ к method объекту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...