JavaScript: 名前空間を空のオブジェクトで作成する

プログラムの規模が大きくなると、変数名、関数名の衝突が起きる可能性が高くなります。

そうした場合は、名前空間という仕組みを用いて変数名、関数名の衝突をさけることができます。 プログラム言語によっては名前空間のことを「パッケージ」ともいいます。

多くの言語では名前空間の仕組みが元々備わっているのですが、JavaScript では備わっていません。 そこで、空のオブジェクトを使って「名前空間」の仕組みを作成します。

名前空間を作成する

例えば、「mySpace」という名前の名前空間を作成する場合は、通常次のように記述します。


// 名前空間作成
var mySpace = mySpace || {};

mySpace というオブジェクトが存在しなければ、 空のオブジェクトを作成するという意味です。

mySpace || {};
の部分が「???」と思う人がいるかもしれません。 この部分はショートカット演算といわれる記述方法で、 普通に if 文を使って書くと次のような記述になります。

var mySpace;

if (!mySpace){
    mySpace = {};
}

最初の記述の方がシンプルですよね。ですから通常、名前空間を作成する場合は、最初に記述したような ショートカット演算を用いて記述します。

名前空間を作成したら、後は「名前空間.変数(関数)」というように記述します。

このように「名前空間」を使って名前の衝突を回避することができます。


mySpace.id = ... ;
mySpace.showId = ... ;

名前空間を階層化する

名前空間を階層化する場合は、最初に作成した「名前空間用オブジェクト」のプロパティとして、 新たに空のオブジェクトを作成します。


// 名前空間作成
var mySpace = mySpace || {};

// 名前空間を階層化
mySpace.student = {};
mySpace.teacher = {};

使用する場合は次のように使用します。


mySpace.student.id = ....;
mySpace.teacher.name = ....;

名前空間をクラスに適用する場合は、次の記事を参考にしてください。
関連記事: 名前空間をクラスに適用する

JavaScript入門