我见过人们在jQuery
对象($
)中添加了自己的自定义/用户功能。例如:
$.myUserFunc = function() { /* regular JS code */}
你为什么要这样做?而不是$.myUserFunc
为什么不简单地创建函数,myUserFunc
或者(如果要避免污染全局范围)将其放在另一个自定义/用户对象上myObj.myUserFunc
呢?
您要询问的构造:
$.myUserFunc = function() {}
在jQuery名称空间对象上创建一个静态函数(全局可用)。这与jQuery插件方法不同。
一个人这样做的原因有很多-有些理由可能比其他理由更合理。
您可以创建一个与jQuery直接相关的jQuery实用工具功能(仅在使用jQuery时有用),但是其功能与插件方法不同。
您有一个不想放到全局名称空间中的全局函数(由于避免了很多顶级全局名称的所有典型原因),并且碰巧使用了jQuery,因此您选择将全局函数放在jQuery namspace对象。
在我看来,第一种是有道理的。如果它是特定于jQuery的函数,但它是全局函数,而不是jQuery对象的方法(例如插件),那么将其放在主jQuery上是有道理的。当已经有合适的顶级名称空间并且您的函数与该名称空间对象相关时,实际上没有理由实现另一顶级名称空间。
我认为,从架构的角度来看,第二个理由没有多大意义。如果此函数不是特定于jQuery的函数(例如,不在jQuery对象上使用或操作),则它实际上不属于jQuery对象。这是一个通用函数,应以更通用的方式定义,作为单例全局函数,或者,如果您具有多种类型的相关函数,请将其放在自己的名称空间对象中。
这就是说,在许多情况下,您只需创建自己的闭包并定义自己的函数以供自己的代码使用,而不必将它们放在全局名称空间或名称空间对象中。因此,除非必须可以从任何地方全局访问这些函数,否则它们不需要使用jQuery对象。
例如,假设您有两个想要共享一个公共功能的jQuery插件方法。显然,必须在这两种插件方法之外定义此功能。但是,它不必全局定义。我可以被关闭并以这种方式共享:
// define closure
(function() {
// declare shared function in a closure
function commonFunc() {
// common code here
}
// define first plugin method
jQuery.fn.plugin1 = function() {
// do stuff
// ....
// use common function
commonFunc();
};
// define other plugin method
jQuery.fn.plugin2 = function() {
// do different stuff
// ....
// use common function
commonFunc();
};
})();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句