你现在做的方式也正是我做的方式,我通常在匿名函数本身内创建窗口对象,然后在其中声明(在本例中:jClass = window.jClass)。
(function (jClass, $, undefined) {
/// <param name="$" type="jQuery" />
var VERSION = '1.31';
UPDATED_DATE = '7/20/2012';
// Private Namespace Variables
var _self = jClass; // internal self-reference
jClass = window.jClass; // (fix for intellisense)
$ = jQuery; // save rights to jQuery (also fixes vsdoc Intellisense)
// I init my namespace from inside itself
$(function () {
jClass.init('branchName');
});
jClass.init = function(branch) {
this._branch = branch;
this._globalFunctionality({ globalDatePicker: true });
this._jQueryValidateAdditions();
//put GLOBAL IMAGES to preload in the array
this._preloadImages( [''] );
this._log('*******************************************************');
this._log('jClass Loaded Successfully :: v' + VERSION + ' :: Last Updated: ' + UPDATED_DATE);
this._log('*******************************************************\n');
};
jClass._log = function() {
//NOTE: Global Log (cross browser Console.log - for Testing purposes)
//ENDNOTE
try { console.log.apply(console, arguments); }
catch (e) {
try { opera.postError.apply(opera, arguments); }
catch (e) { /* IE Currently shut OFF : alert(Array.prototype.join.call(arguments, ' '));*/ }
}
};
}(window.jClass= window.jClass|| {}, jQuery));
我让他们像这样完全匿名的原因是,假设在另一个文件中我想为这个 jClass 添加更多功能。我只是创建另一个:
(function jClass, $, undefined) {
jClass.newFunction = function (params) {
// new stuff here
};
}(window.jClass = window.jClass || {}, jQuery))
如您所见,我更喜欢 object.object 表示法,但您可以使用对象文字 object : object,这取决于您!
无论哪种方式,通过将所有这些分开,并在没有实际页面逻辑的情况下进行封装,可以更轻松地将其包含在 globalJS 文件中,并且您网站上的每个页面都可以使用它。比如下面的例子。
jClass._log('log this text for me');
您不想将模型逻辑与您的业务逻辑交织在一起,因此您在正确的道路上将两者分开,并允许您的全局命名空间/类/等更加灵活!