目的...
- グローバルオブジェクトから変数、オブジェクトなどを削除します。
- 衝突の可能性を取り除きます。
まず、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();
これは良いパターンですか?