【问题标题】:$.fn.myPlugin vs $.something.myPlugin in regard to private and public methods$.fn.myPlugin vs $.something.myPlugin 关于私有和公共方法
【发布时间】:2017-01-17 17:11:45
【问题描述】:

所以我似乎无法找到直接的答案,只有使用类似插件/方法声明的多个变体的模糊示例。我是这么说的

$.fn.myPlugin

我正在定义一个公开可用的插件方法,它可以在 fn 表示原型的任何有效 jQuery 对象上执行。然后我的问题是,通过在我的主插件内部定义一个方法,就像这样

$.fn.myPlugin.methodName

或者像这样在我的插件之外

$.something.methodName //where 'something' is in place of 'fn'

这会影响它成为公共私有/方法吗?如果每个都是不同类型的声明,有什么区别。

我想知道为什么我想知道的背景故事是我想定义一个可以调用并正常运行的主插件,但是如果最终用户想重新定义一些方法,我已经允许公开然后他们可以做到这一点。如果我不想让用户重新定义任何方法,而是提供回调以便他们可以挂钩,那么我想将该方法设为私有。

【问题讨论】:

  • 如果您在$.whatever 上设置任何内容,那么它就是公开的...
  • 那么我会用$.fn.myPlugin.privateMethod 为myPlugin 声明一个私有方法吗?
  • 没有。您不能像这样在公共范围内创建私有方法。查看下面@NiettheDarkAbsol 提供的答案,了解如何操作。
  • 是的,我刚刚看到它在发布最后一条评论后弹出,完美地解释了它。谢谢你们!

标签: javascript jquery jquery-plugins private-methods public-method


【解决方案1】:

$.whatever 上设置的任何内容都将是公开的,因此可以被其他开发者修改。

如果你想要私有方法,你应该创建一个闭包。

(function() {
    function init(jqObj) { ... } // do magic here
    $.fn.myPlugin = function() { init(this); } // avoid exposing core method
    $.fn.myPlugin.publicMethod = function() { ... }
    function privateMethod() { ... }
})();

【讨论】:

  • 啊,好吧,这是有道理的。我确实通过(function($) { }(jQuery)); 定义了闭包我现在看到私有方法只是局部范围的函数。那是我缺少的部分,但是,您是否使用 function(init) 作为主插件的私有功能以避免任何人过度编写插件本身?
猜你喜欢
  • 2011-12-06
  • 2012-05-05
  • 1970-01-01
  • 2011-09-19
  • 2013-05-03
  • 2019-08-26
  • 2012-05-14
  • 1970-01-01
  • 2011-12-08
相关资源
最近更新 更多