3

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

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

这是简化的代码:

;(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()
4

1 回答 1

2

是的,它有缺点。

  1. 您正在使用所有publicMethods. 这意味着one(), two()andthree()也可以在其他 jQuery 对象上调用——在你调用之后.myplugin()——这可能会导致意想不到的结果?

  2. 以这种奇怪的方式保持代码结构是高度不可维护的 - 函数内部的对象。为什么不将您的添加publicMethods$.fn,因为这基本上是您想要实现的目标?

我建议只在范围内制作和访问one(),这样你就可以做类似但不做的事情。two()three()myplugin()$('#foo').myplugin().one()$('#foo').one()

于 2012-06-29T09:47:38.487 回答