2

Superfish JS 来

以下是相关代码:

$.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 是不久前写的......这仍然是允许用户覆盖插件功能功能/方法/其他的最佳方式吗?如果没有,是否有“最佳”方式?

4

1 回答 1

2

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


这篇文章是这样说的:

延长

在我看来,这是创建 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 库过渡的程序员更多地使用 extend 方法。我个人觉得这个简单的$.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();
});

接下来,这篇文章说:

在适用的情况下提供对辅助功能的公共访问

// 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命名空间中的函数。

摘要和最佳实践说:

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

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

于 2012-07-04T20:25:38.817 回答