FC2ブログ

サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
2010/04/23

Ext JS-大規模プロジェクトを実現する工夫-その2

「Ext JS-大規模プロジェクトを実現する工夫」で紹介したコードの中に、

CodeCabinetExt.UIObjects.Viewport

という部分がありました。説明なしで掲げたコードですが、実はこれも大規模プロジェクトを実現する工夫の一つです。

JavaScriptはJavaのようにパッケージの概念がないので、システムが大規模化してくると変数名や関数名の衝突を気にする必要が出てきます。フリーソフトとして公開されたあるJavaScriptのコードにこんな記述を見たことがあります。


if (typeof('hoge') != 'function') {
function hoge() {
// いろんな処理
}
}

要はhogeという名の関数が既にあれば新たに関数hogeを定義せず、ない場合に関数hogeを定義するという意味です。あまり格好のいい書き方ではありませんが、変数名、関数名の衝突を防ぐ方法の一つではあります。

何度か紹介している本「JavaScript:The Good Parts」には、こうした名前衝突の対策として、オブジェクトとして定義せよ、とあります。つまり、

var bizviz = {};

とオブジェクトを定義してから、bizviz.hogeのようにプロパティや関数などを書いてやると、bizvizという名前が衝突しない限り、名前の衝突を気にする必要はありません。bizviz.hogeとhogehoge.hogeは別物になるからです。

とはいえ、この{ }という書き方は慣れないと「?!」という感じです。

Ext JSではこの記述を

Ext.namespace("bizviz");

と書くことができます。最初の例で言うと、

Ext.namespace("CodeCabinetExt", "CodeCabinetExt.UIObjects");

とあらかじめ指定しておくわけです。名前空間を指定するというのが、コードを見てわかりやすくなっています。当然ですが、名前空間内の変数やクラスなどはグローバルではないので、衝突を気にする必要がありません。

P.S. 2011年2月22日に、上記コードが間違っていたので修正しました。失礼しました。

スポンサーサイト



コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/442-4894ad8f

■  カレンダー

10 | 2019/11 | 12
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード