我很好奇在构造封装代码块时是否有与JQuery相关的最佳实践.
通常,当我构建一个页面时,我喜欢将该页面中使用的函数封装在一个对象中.这允许我在构建应用程序时进行一些封装.没有什么比讨论一堆JavaScript文件更讨厌了
function doSomethingOnlyRelevantOnThisPage() { // do some stuff }
我这使得设计混乱,并没有很好地封装功能.
通常在许多框架中,有一个标准用于执行此封装.
在Mootools中,他们喜欢Object Literal Notation:
var Site = { // properties and methods }
在YUI中,他们喜欢自执行函数表示法:
(function() { // properties and methods })()
第二个例子的好处是创建了一个闭包,从而允许你定义私有属性和方法.
我的问题是:任何JQuery爱好者都有创建这些干净封装结构的最佳实践吗?使用它们的理由是什么?
由于我一直在使用jQuery一段时间,我已经决定了一个适合我的标准模式.
它是YUI模块模式与混合了一些jQuery插件模式的组合.我们最终使用自执行闭包模式.这在以下几个方面是有益的:
它将代码保持在最低限度
它强制将行为与表达分开
它提供了一个阻止命名冲突的闭包
这就是它的样子:
;(function($) { var myPrivateFunction = function() { }; var init = function() { myPrivateFunction(); }; $(init); })(jQuery);
我们意识到,分配函数执行的结果(类似于YUI模块模式)会暴露可能在表示代码中调用的代码.我们想要防止这种情况,所以这种模式适合.
当然,我们可以编写init方法内联,而无需为函数定义变量.我们同意明确定义init函数使代码更清晰.
如果我们想在页面/外部js文件之间共享功能会发生什么?我们简单地介绍了jQuery为扩展jQuery对象本身提供的现有机制 - 扩展函数.
如果函数是静态的,我们使用$ .extend,如果它们在包装集上运行,我们使用$ .fn.extend函数.
希望这有助于某人.