jQuery插件教程混乱

时间:2011-08-12 14:53:59

标签: jquery jquery-plugins

我必须遗漏一些东西。 jQuery插件教程在“命名空间”中找到了here - > “插件方法”部分,有潜伏在下面的插件声明。我没有得到的是方法变量的范围;我的意思是,不应该将方法定义为工具提示中的var吗?一旦这个匿名函数执行,如果我理解正确,方法就会超出范围,因为它被定义为函数中的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 个答案:

答案 0 :(得分:7)

分配给$.fn.tooltip的功能是closure [Wikipedia],因此可以访问所有更高的范围。

当外部函数返回时,methods不会被销毁,因为闭包仍然引用它。

答案 1 :(得分:1)

它不会完全超出范围,因为您的插件仍然保留对它的引用。在JS中,它们被称为closures

答案 2 :(得分:0)

这一切都因闭合而起作用。 $.fn.tooltip指向的函数实际上是一个闭包。因此它可以访问method对象。