このドキュメントでは、長い名前空間を持つ型をローカルでエイリアスする必要があると明示的に述べています。
読みやすさが向上する場合は、完全修飾型のローカル エイリアスを使用します。ローカル エイリアスの名前は、型の最後の部分と一致する必要があります。
ただし、参照の安全性を除いて、なぜ名前空間に別名を付けてはいけないのか想像できません
エイリアス化された名前空間の問題は、参照が同じインスタンスを指していないことです。
my.long.namespaces.myFunc()
// this refers to the same function, but is a different reference
var myLocalNamespace = my.long.namespace;
namespace.myFunc();
// and you can easily introduce bugs which are hard to find
myLocalNamespace.myFunc = "foobar";
myLocalNamespace.myFunc() // throws a type error because myFunc is now a string
このバグは検索が困難です。
ただし、エイリアシングには多くの利点があります。JavaScript での各メンバー ルックアップには時間がかかります。そのため、メンバーのチェーンを常に検索する必要があるコードを使用すると、速度が無駄になります。local のコストは無視できるほど小さいため、長い名前空間や関数の結果 ( など) などvar
を参照する場合は常に、ローカル変数を使用することを強くお勧めします。$("something")
また、コードがはるかに読みやすくなります。次の点を考慮してください。
var handleNamespace = function() {
my.really.long.namespace.foo = "bar";
my.really.long.namespace.doIt(my.really.long.namespace.foo);
my.really.long.namespace.member = my.really.long.namespace.somethingElse(my.really.long.namespace.addOne(2));
};
ご覧のとおり、これはすぐに混乱します。コードの繰り返しをなくすと、処理能力が節約され、コードが読みやすくなります。
var handleNamespace = function() {
var namespace = my.really.long.namespace,
three = namespace.addOne(2);
namespace.foo = "bar";
namespace.doIt(namespace.foo);
namespace.member = namespace.somethingElse(three);
};