プロが教えるわが家の防犯対策術!

・名前空間が分からないので教えてください

・下記例で、Hogeは何に該当するのでしょうか?
・Hoge.getPerson()と呼んでいるので、グローバル環境に生成した名前空間?
・それとも、var宣言しているので、ローカル変数?
・あるいは、ドットで繋いでいるので、オブジェクト?
・もしかして、「名前空間」であり「変数」であり「オブジェクト」でもある?

var Hoge = (function(){

 //中略

 return {
  getPerson: _getPerson
 };
}());

Hoge.getPerson();


・名前空間って何ですか?

A 回答 (1件)

Hoge はグローバルスコープの変数で、


変数が指し示すのが名前空間「っぽい」オブジェクトです。

そもそも JavaScript には言語的に名前空間がありませんが、
慣習的に名前空間「っぽい」オブジェクトの書き方があります。

この名前空間「っぽい」オブジェクトを導入する利点としては、
・他人の作ったスクリプトと並存したときの危険性が下がる (グローバルスコープの汚染が少ないので変数名が被りづらい)
・関連する変数や関数が集まっているので管理がしやすい
・コーディングが綺麗になる (全ての関数名に長ったらしい前置詞を強制されない)
があるので、ある一定の規模のライブラリを作るなら採用するのが常識になっているようです。
jquery.js なら $ とか jQuery とかですね。


Hoge.getPerson() の挙動ですが、詳しく整理するならば

グローバルスコープの変数 Hoge
→ が指し示すオブジェクト (即時関数の戻り値である名前空間っぽいオブジェクト)
→ のプロパティ getPerson
→ が指し示すオブジェクト(ローカルスコープの_getPersonに入っていた関数オブジェクト)
→ を実行


余談ではありますが、

Hoge というのは命名規則的にどうかと思います。
JavaScript は一応は Java っぽい言語なので、命名規則も大体は Java に準じています。
で、Java の推奨される命名規則といえば、
パッケージ: hoge.boke
クラス: HogeBoke
関数名: doHogeBoke
変数名: hogeBoke
定数名: HOGE_BOKE
ですので、JavaScript でも名前空間っぽいオブジェクトは hoge とすべきでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>Hoge はグローバルスコープの変数で、
>変数が指し示すのが名前空間「っぽい」オブジェクトです。
>そもそも JavaScript には言語的に名前空間がありませんが、
>慣習的に名前空間「っぽい」オブジェクトの書き方があります

・説明分かりやすかったです
・命名規則アドバイスもありがとうございました

・大変参考になりましたー

お礼日時:2013/12/18 07:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!