目标...
- 从全局对象中移除变量、对象等。
- 消除冲突的可能性。
首先,我实现了Yahoo命名空间代码(为了举例,我使用ROOT作为我的命名空间根)...
if (typeof ROOT == "undefined" || !ROOT) {
var ROOT = {};
}
ROOT.namespace = function () {
var a = arguments,
o = null,
i, j, d;
for (i = 0; i < a.length; i = i + 1) {
d = ("" + a[i]).split(".");
o = ROOT;
for (j = (d[0] == "ROOT") ? 1 : 0; j < d.length; j = j + 1) {
o[d[j]] = o[d[j]] || {};
o = o[d[j]];
}
}
return o;
}
现在我声明我的第一个命名空间...
ROOT.namespace("UI");
ROOT.UI = {
utc: 12345,
getUtc: function() {
return this.utc;
}
}
我在这里想做的是保存我在 UI 中需要的变量(在这种情况下是 UTC 当前时间),以便它们不在全局对象上。我还想提供一些特定功能。这应该在每个页面上都可用,无需任何实例化...
现在我想在我的命名空间结构中存储一个对象。但是,这个对象将需要多次创建。这里的目标是将其保留在我的结构中,但允许根据需要创建多次。具体步骤如下:
ROOT.namespace("AirportFinder");
ROOT.AirportFinder = function(){
this.var1 = 99999;
this.Display = function() {
alert(this.var1);
}
}
这是实例化对象的示例代码...
var test1 = new ROOT.AirportFinder();
test1.Display();
这是一个好的设计模式吗?
ROOT: {UI: {Airport: {Finder: {}}}}
,根据需要创建新的对象。如果您只想创建一级子代,则不需要此方法。 - Nathan Ostgard