这个jQuery插件模式的缺点是添加公共方法

时间:2012-06-29 08:00:03

标签: jquery jquery-plugins design-patterns

我正在研究一个非常大的插件我想知道这种添加公共方法的模式是否有任何缺点,如果有的话是什么?

编辑:为了澄清,使用这种方法,我可以看到的优点是你可以使用插件范围内的任何私有变量,你可以轻松地链接方法。我看不到有什么缺点?它一直运行良好,但我不确定这是否适用于大插件的可扩展性。

这是简化的代码:

;(function($){

  $.fn.myplugin = function () {

    var self = this

    var publicMethods = {      
      one: function () {
        ...
        return self
      },
      two: function () {
        ...
        return self
      },
      three: function () {
        ...
        return self
      }
    }

    for (var m in publicMethods)
      self[m] = publicMethods[m]

    return self

  }

}(jQuery))

// Usage
var $myplugin = $('#foo').myplugin()
$myplugin.one().two().three()

1 个答案:

答案 0 :(得分:2)

是的,它有缺点。

  1. 您正在使用publicMethods all 来污染jQuery内部命名空间。这意味着,在您调用one()之后,也可以在其他jQuery对象上调用two()three().myplugin() - 这可能会导致意外结果?

    < / LI>
  2. 以这种奇怪的方式保持代码结构是非常难以维护的 - 一个函数内部的对象。为什么不将publicMethods添加到$.fn,因为它基本上是您要实现的目标?

  3. 我建议只在one()范围内访问two()three()myplugin(),以便您可以执行$('#foo').myplugin().one()之类但不能$('#foo').one()之类的内容{1}}。