您的代码暗示了命名空间模式,但略显不足。
你可能想考虑这样的事情
var TAP = (function($) {//functional namespace
var settings = {
hold_threshold: 750,
hold_timer: null,
timer: null
};
var setSettings = function(s) {
settings = $.extend(settings, s);
};
var getSettings = function() {
return settings;
};
return {
set: setSettings,
get: getSettings
};
})(jQuery);
因此,TAP
具有私有成员settings
和公共成员set()
,并且get()
. 您将看到可以轻松添加更多私有和公共成员。
现在,您有一种机制可以从 TAP 范围内的任何位置设置和获取 TAP 设置:
TAP.set({hold_threshold: 500});
var Navigation = {
init: function () {
self = this;
$('#button').live(tapMode, function () {
alert(settings[TAP.get().hold_threshold]);
});
}
}
作为TAP
全局命名空间中的成员,它的公共方法在所有范围内都可用。
更典型的是,您将使用 MODULE 模式,它只将一个PROJECT 成员放入全局命名空间,包含任意数量的 MODULE,每个 MODULE 包含任意数量的功能性命名空间,例如:
var MYPROJECT = {};//global
MYPROJECT.MODULE1 = {};
MYPROJECT.MODULE1.TAP= (function($) {
var settings = {
hold_threshold: 750,
hold_timer: null,
timer: null
};
var setSettings = function(s) {
settings = $.extend(settings, s);
};
var getSettings = function() {
return settings;
};
return {
set: setSettings,
get: getSettings
};
})(jQuery);
按照惯例,MYPROJECT、它的 MODULES 和它的功能性命名空间都是大写的。