3

JavaScript の基本的な概念はよく知っていますが、高度な概念のいくつかを理解するのに苦労しています。私が疑問に思っている概念は名前空間です。いつ便利ですか?どのように使用すればよいですか?説明をいただければ幸いです。

4

2 に答える 2

3

例を挙げてお答えします。

桁数になるように数字をパディングしたい2場合、

function pad(x) {
    return ('00' + x).slice(-2);
}
pad(3); // "03"

nウェブサイトには、数字の桁を埋める他のコードがあります

function pad(x, n) {
    x = '' + x;
    n = n + 1 - x.length;
    if (n < 0) n = 0;
    return new Array(n).join('0') + x;
}
pad(3, 5); // "00003"

これら 2 つのコードが同じページにある場合はどうなるでしょうか。
現時点での順序で、次のようになります。

pad(3); // RangeError: Invalid array length

関数の名前が同じであるため、間違った関数が使用されます。

この種の問題をどのように回避できますか? 名前空間!すべてのコードを名前空間に入れる場合、心配する必要がある唯一の競合は、名前空間の選択された名前です。他のすべてはそれに応じて名前が付けられるため、競合しません。


JavaScriptの名前空間は非常に多くの方法で実現できますが、通常はオブジェクトにプロパティを追加することになります

// make an Object to be your namespace
var myNamespace = {};
// define your thing of interest within namespace
myNamespace.pad = function (x) {return ('00' + x).slice(-2);};
// and then use it
myNamespace.pad(3); // "03"
于 2013-06-29T17:22:42.870 に答える
2

どのような場合に役立つかという質問に答えるために、JavaScript で名前空間を使用することが不可欠になるシナリオの 1 つは、他の JavaScript ライブラリを使用している場合です。自分のコードとそのコードの間、およびそれらの間の名前の競合を回避したい。

この問題の詳細な議論でAddy Osmaniを引用するには:

JavaScript では、同じ変数またはメソッド名を使用するページ上の別のスクリプトが発生した場合にコードが壊れないようにすることが重要であるため、エンタープライズ レベルでの名前空間は重要です。最近、多くのサードパーティのタグがページに定期的に挿入されているため、これは私たち全員がキャリアのある時点で取り組む必要がある共通の問題になる可能性があります. グローバル名前空間の行儀の良い「市民」として、同じ問題のために他の開発者のスクリプトの実行を同様に妨げないように最善を尽くすことも不可欠です。

于 2013-06-29T17:08:54.167 に答える