jquery.effects.core.js的第10 - 16行:
;jQuery.effects || (function($, undefined) {
var backCompat = $.uiBackCompat !== false; // Irrelevant
$.effects = {
effect: {}
};
})(jQuery); // At end of file
据我所知,这添加了一个effects
"命名空间",但只有在它还不存在的情况下。
谁能给我解释一下:
- 开头的分号是干什么用的?
-
undefined
参数的目的是什么?undefined
的含义是否在某种程度上被覆盖了? - 直接向
jQuery
对象添加一个函数与按照jQuery文档中的建议向jQuery.fn
添加一个函数之间有什么区别? - 最后,如果我想创建一堆只供我自己的团队使用的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插件,那么使用上面的代码将它们放在公司名称空间下是否有意义?
大多数人不这么做。我不推荐。也许一个常见的"小"前缀就足够了。