1

非常に単純な Firefox アドオンの開発の一環として、Javascript の学習を開始しました。Firefox アドオンのチュートリアルでは、このように名前空間内のすべての関数とデータをカプセル化するようアドバイスしています。

if ("undefined" == typeof(XULSchoolChrome)) {
    var XULSchoolChrome = {};
};

XULSchoolChrome.BrowserOverlay = {
    first_name : new String,
    onmenuclick : function(aEvent) {
        // do something here
    }
};

これに関連していくつか質問があります。

  1. XULSchoolChromeという名前のプロパティを持つオブジェクトであることは理解していますBrowserOverlay。しかし、では と は何first_nameですかonmenuclick?それらはオブジェクトのサブプロパティですか?BrowserOverlay
  2. first_name関数内にアクセスする必要がある場合onmenucickは、完全修飾する必要がありますXULSchoolChrome.BrowserOverlay.first_name。これは、重要なコードではすぐに扱いにくくなります。Javascript で名前空間をシミュレートするより優雅な方法はありますか?
ありがとう。

4

1 に答える 1

1

しかし、first_name と onmenuclick とは何でしょう?

はい、それらはオブジェクトのプロパティによって参照されるオブジェクトのBrowserOverlayプロパティですXULSchoolChrome

Javascript で名前空間をシミュレートするより優雅な方法はありますか?

いいえ、常にオブジェクトを介してプロパティを参照する必要があります。ただし、サブ名前空間を変数に短縮できます。

var bo = XULSchoolChrome.BrowserOverlay;
// then use
bo.first_name…
bo.…

または、名前空間オブジェクトの「メソッド」のthisキーワードを使用できる場合があります。これは、通常異なるコンテキストで呼び出されるイベント ハンドラー関数に対しては直接機能しないことに注意してください。

于 2013-01-27T20:53:14.887 に答える