2016-12-22 19 views
0

誰かが適切Javascriptの名前空間と未定義の機能

foo(); //outputs 'foo' 

function foo(){ 
    console.log('foo'); 
} 

これを行う方法を説明することができますが、これは「関数が定義されていません」というエラー

MY_NAME_SPACE ={}; 

MY_NAME_SPACE.foo(); //undefined 

MY_NAME_SPACE.foo = function(){ 
    console.log('foo'); 
}  

を与える私は、第二の例では、コールをそれを見ることができます関数がMy_NAME_SPACEオブジェクトに追加される前に作成されましたが、この場合、注文が重要な場合、このタイプの「名前空間」はどのように使用されますか?

+0

もう少し明確にする...私は、このエラーが起こっていることを知っています。なぜなら、関数が宣言され/オブジェクトに追加される前に関数を呼び出すからです。しかし、名前の重複などを避けるために、このタイプの「名前空間」を使用することについて読んでいましたが、コード/関数の順序を心配する必要があるようです。 – fredmarks

+0

名前空間を作成する前に単純に*使用しませんか? – Bergi

答えて

1

はい、この名前空間パターンを使用する場合は、名前空間にメソッドを呼び出したり、まだ名前空間に割り当てられていないプロパティ値にアクセスしたりする前に、名前空間を作成して設定する必要があります。

の代わりに例えば、名前空間のオブジェクトを定義して、名前空間内の各連続したメソッドを定義:

var MY_NAME_SPACE = {}; 

MY_NAME_SPACE.foo = function() { 
    console.log('foo'); 
} 

私が欲しいの方法はMY_NAME_SPACEに含まれているとして、私は、module patternと呼ばれるものを使用することを好みます視覚モジュールに包まれています。

var MY_NAME_SPACE = (function() { 

    var foo = function() { 
     console.log('foo'); 
    }; 

    return { foo: foo }; 

})(); 


MY_NAME_SPACE.foo() 

また、名前空間またはモジュールにラッピングをご希望の方法は、独立した再利用可能な場合、それは別のファイルを作成するために理にかなっているだろう、多分このファイルをMY_NAME_SPACEMY_NAME_SPACE API)のメソッドにアクセスする必要があるプロジェクトに含めます。

関連する問題