Superfish插件:$ .fn.extend({...}) - 这段代码是如何工作的?

时间:2012-07-01 23:08:24

标签: jquery plugins override

Superfish JS是here

以下是相关代码:

$.fn.extend({
    hideSuperfishUl : function() {
        // ...code here...
        return this;
    },
    showSuperfishUl : function(){
        // ...code here...
        return this;
    }
});

问题:

$.fn.extend({...});是否允许用户覆盖hideSuperfishUl& showSuperfishUl功能?如果是这样,在调用插件时更改这些方法的语法是什么样的:

<script> 

    $(document).ready(function() { 
        $('ul.sf-menu').superfish(); // How to override hideSuperfishUl &/or showSuperfishUl?
    }); 

</script>

Superfish被写了一段时间......这仍然是允许用户覆盖插件功能功能/方法/其他的最佳方式吗?如果没有,是否有“最佳”方式?

1 个答案:

答案 0 :(得分:2)

在这里尝试回答我自己的问题... 如果我在下面写的任何内容错误,请纠正我!;)


This article说:

  

扩展

     

在我看来,这是创建jQuery最不惯用的方法   插入。它使用jQuery.fn.extend方法代替   jQuery.fn.pluginName

(function($){
  $.fn.extend({
      myPlugin: function() {
          return this.each(function(){
              // do something
          });
      },
      myOtherPlugin: function() {
          return this.each(function() {
              // do something
          });
      }
  });
})(jQuery);
     

如果您需要添加大量数字,您会发现此结构很有用   jQuery的插件方法。不过,我会争辩说,如果你的话   插件需要添加那么多方法,可能有更好的方法   构建其实施。

     

我觉得扩展方法更多地被程序员转换使用   来自其他JS库。我个人觉得简单的$.fn.pluginName =结构更易于阅读,更符合您在jQuery插件中通常会看到的内容。

Superfish JS使用上面引用的相同代码;简而言之,showSuperfishUl()hideSuperfishUl()是jQuery $.fn命名空间中的其他插件。

我能够覆盖所谓的功能:

jQuery(function(){

    $.fn.showSuperfishUl = function() {
        console.log('OMG');
        return this;
    };

    $.fn.hideSuperfishUl = function() {
        console.log('BECKY');
        return this;
    };

    jQuery('ul.sf-menu').superfish();
});

接下来,this article说:

  

提供适用的辅助功能的公共访问

// plugin definition
$.fn.hilight = function(options) {
  // iterate and reformat each matched element
  return this.each(function() {
      var $this = $(this);
      // ...
      var markup = $this.html();
      // call our format function
      markup = $.fn.hilight.format(markup);
      $this.html(markup);
  });
};
// define our format function
$.fn.hilight.format = function(txt) {
  return '<strong>' + txt + '</strong>';
};
     

我们可以轻松支持选项上的另一个属性   允许提供回调函数来覆盖的对象   默认格式。这是另一种很好的支持方式   自定义您的插件。这里显示的技术需要这个   通过实际暴露格式函数以便它可以进一步   被重新定义。有了这种技术,其他人就有可能   他们自己定制的插件覆盖,换句话说就是它   意味着其他人可以为你的插件编写插件。

结论:

$.fn.extend$.fn.pluginName.function都相似,并允许最终用户轻松覆盖功能;前者将新插件添加到jQuery $.fn命名空间,而后者是包含在单个$.fn.pluginName命名空间中的函数。

Summary and Best Practices说:

  

不要将jQuery.fn对象与每个多个命名空间混为一谈   插件。

...因此,我选择的“最佳”技巧是$.fn.pluginName.function