jquery - 添加公共(public)方法的 jQuery 插件模式的缺点

标签 jquery jquery-plugins design-patterns

我目前正在开发一个相当大的插件,我想知道这种添加公共(public)方法的模式是否有任何缺点,如果有的话,这些缺点是什么?

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

这是简化的代码:

;(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. 您的 publicMethods全部正在污染 jQuery 内部命名空间。这意味着one() , two()three()也可以在其他 jQuery 对象上调用 - 在调用 .myplugin() 之后- 这可能会导致意想不到的结果?

  2. 以这种奇怪的方式保持代码结构(函数内部的对象)是非常难以维护的。为什么不直接添加您的 publicMethods$.fn ,因为这基本上就是您想要实现的目标?

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

关于jquery - 添加公共(public)方法的 jQuery 插件模式的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11258159/

相关文章:

javascript - 我怎样才能连接数组中的每一个独特的可能性

jquery - 动画滚动以锚定在页面上

具有组合行的 jQuery 表排序器

jQuery 插件和 Polymer 元素

java - 类/实体设计。用户类及其子类

java - 工厂模式不遵循 OPEN CLOSE 原则

javascript - 在浏览器上存储一个 css 类

javascript - 使工具提示插件跟随鼠标而不是静态位置

java - Java中的重构方法: What pattern should I apply?

jquery - 获取 HTML5 中所需的 CSS 浏览器用途