请解释一下jQuery-ui项目中的这些行,它们与添加“子插件”有关

Please explain these lines in the jQuery-ui project - has to do with adding "sub-plugins"

本文关键字:添加 有关 子插件 插件 解释 一下 jQuery-ui 项目      更新时间:2023-09-26

jquery.effects.core.js的第10 - 16行:

;jQuery.effects || (function($, undefined) {
    var backCompat = $.uiBackCompat !== false; // Irrelevant
    $.effects = {
        effect: {}
    };
})(jQuery); // At end of file

据我所知,这添加了一个effects"命名空间",但只有在它还不存在的情况下。

谁能给我解释一下:

  1. 开头的分号是干什么用的?
  2. undefined参数的目的是什么?undefined的含义是否在某种程度上被覆盖了?
  3. 直接向jQuery对象添加一个函数与按照jQuery文档中的建议向jQuery.fn添加一个函数之间有什么区别?
  4. 最后,如果我想创建一堆只供我自己的团队使用的jQuery插件,使用上面的代码将它们放在一个公司名称空间下是否有意义?

编辑:我现在意识到jQuery。Effects可能是一个不好的例子。我看到jQuery.ui.core.js有不同的做法:

(function( $, undefined ) {
    $.ui = $.ui || {};
    // add some stuff to $.ui here
    $.fn.extend({
        // plugins go here
    });
})(jQuery);

但是,如果插件直接添加到$.fn, ui对象的用途是什么?我可以在$.fn下定义我的命名空间并将所有插件添加到$.fn.acme,以便我像这样使用它们:$('something').acme.doStuff()吗?

对于这类事情是否有最佳实践?

  • 检查jQuery.effects是否存在
  • 如果没有,则定义一个函数并同时调用(function() { ... } (jquery),它传递jQuery对象的原因与范围和冲突等。
  • 该函数的第一行据说是不相关的,它似乎在检查jQuery插件属性
  • 的存在
  • 它定义了一个占位符(像命名空间或容器类)的效果jQuery插件属性。

那么,对于你的问题:

1。最初的分号是干什么用的?

我觉得没什么特别的。只是确保陈述清楚。如果在这一行之前的最后一行是一个函数声明关闭,这有一些边缘情况。

2。未定义参数的目的是什么?未定义的含义是否在某种程度上被忽略了?

它只是确保以后不会发生这种情况。直接传递全局对象。我想这是常见的模式。

3。直接向jQuery对象中添加函数与向jQuery中添加函数之间的区别是什么?jQuery文档中推荐的fn ?

这是jQuery的结构和一般组织问题。jQuery对象是一个函数并返回一个对象。.fn处理注册这个应用于返回的jQuery对象(从jQuery选择或左右),所以,这是更好的,使jQuery实际上知道你添加的功能。

4。最后,如果我想创建一堆仅供我自己的团队使用的jQuery插件,那么使用上面的代码将它们放在公司名称空间下是否有意义?

大多数人不这么做。我不推荐。也许一个常见的"小"前缀就足够了。