2007-02-02
JavaScript の名前空間
JavaScript での大規模開発では
シンボルの衝突が非常に大きな問題となる。その代表例が Firefox の拡張機能内のシンボルである。
で、こんな記述ルールはどうだろう
window['http://d.hatena.ne.jp/amachang/']={}; // URI (function(){with(this){ // ここにコードを書く }}).apply(window['http://d.hatena.ne.jp/amachang/']); // URI
例えば
window['http://d.hatena.ne.jp/amachang/']={}; (function(){with(this){ var hoge = 'hoge'; // このスコープ内で共有するシンボル this.fuga = 'fuga'; // 同じ名前空間で共有するシンボル window.piyo = 'piyo'; // グローバルで共有するシンボル alert(hoge); // hoge alert(fuga); // fuga alert(piyo); // piyo }}).apply(window['http://d.hatena.ne.jp/amachang/']); (function(){with(this){ //alert(hoge); // (Error) alert(fuga); // fuga alert(piyo); // piyo }}).apply(window['http://d.hatena.ne.jp/amachang/']); alert(piyo); // piyo
問題点
あまりスコープを重ねるとシンボル探索とスコープチェーン構築*1に時間がかかるようになって全体の速度が少し遅くなる。
まあ、保守性とのトレードオフということですね。
トラックバック - http://d.hatena.ne.jp/amachang/20070202/1170381958
リンク元
- 323 http://reader.livedoor.com/reader/
- 240 http://d.hatena.ne.jp/
- 211 http://b.hatena.ne.jp/
- 181 http://b.hatena.ne.jp/hotentry
- 181 http://blog.livedoor.jp/dankogai/archives/50754803.html
- 101 http://b.hatena.ne.jp/entrylist?sort=hot
- 93 http://www.google.co.jp/ig?hl=ja
- 49 http://www.google.com/reader/view/
- 40 http://blog.livedoor.jp/dankogai/
- 40 http://www.google.co.jp/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-42,GGGL:ja&q=FireBug
