8

私は現在、JavaScriptコードに名前空間を与えるために次のことを行っています:

(function(foo, $, undefined) {
    // function: showNoteDialog
    foo.showNoteDialog = function() {
       // ...
    }
}(window.foo = window.foo || {}, jQuery));

私が好むのは、代わりに次のとおりです。

foo.showNoteDialog()

複数レベルの名前空間を持つことです:

foo.notes.showDialog()
foo.other.showDialog()

これは可能ですか?どうすればいいですか?

4

5 に答える 5

9

これが私が通常行う方法です:

var TopLevel = TopLevel || {}; //Exentd or Create top level namespace
TopLevel.FirstChild = TopLevel.FirstChild || {}; //Extend or Create a nested name inside TopLevel

この方法を使用すると、ファイル間の安全性が確保されます。TopLevel が既に存在する場合は、それを TopLevel 変数に割り当てます。存在しない場合は、拡張可能な空のオブジェクトを作成します。

したがって、Application 名前空間内に存在し、複数のファイルに拡張されたアプリケーションを作成する場合は、次のようなファイルが必要になります。

ファイル 1 (ライブラリ):

var Application = Application || {};

Application.CoreFunctionality = Application.CoreFunctionality || {};
Application.CoreFunctionality.Function1 = function(){
  //this is a function
}//Function1

ファイル 2 (ライブラリ):

var Application = Application || {};

Application.OtherFunctionality = Application.OtherFunctionality || {};
Application.OtherFunctionality.Function1 = function(){
  //this is a function that will not conflict with the first
}

ファイル 3 (ワーカー):

//call the functions (note you could also check for their existence first here)
Application.CoreFunctionality.Function1();
Application.OtherFunctionality.Function1();
于 2011-10-19T16:52:19.167 に答える
4

namespace.jsを見てください。これにより、パブリックメソッドとプライベートメソッドを使用してネストされた名前空間を宣言できます。スコープに関係なく、プレフィックスなしで名前空間ブロック内の任意のメソッドを呼び出すことができるので便利です。

(function() {
  namespace("example.foo", bar);

  function foobar() { return "foobar"; };
  function bar() { return foobar(); };
}());

example.foo.bar(); // -> "foobar"
于 2011-10-19T17:03:10.263 に答える
2

JSには名前空間はありませんが、次のような他のオブジェクトにオブジェクトを割り当てることができます。

x = {};
x.y = {};
x.y.z = function() {};
于 2011-10-19T16:46:27.087 に答える
1

私はbob.js フレームワークを使用してそれを行います:

bob.ns.setNs('myApp.myMethods', {
    method1: function() {
        console.log('This is method 1');
    },

    method2: function() {
        console.log('This is method 2');
    }
});
//call method1.
myApp.myMethods.method1();
//call method2.
myApp.myMethods.method2();
于 2012-11-01T17:46:44.373 に答える