最近、JS コードをリファクタリングしたところ、次のパターンに出くわしました。
APP = (function() {
var x,y,z;
function foo() {}
function bar() {}
return {x:x, y:y, z:z, foo:foo: bar:bar};
})();
これの利点は、 で定義されたすべてのものにアクセスできる関数を使用して非グローバル変数を作成することですAPP
。、 などを入力せずに 、 、 bar にアクセスできAPP.foo
ます。 、などを使用してすべてにグローバルにアクセスすることもできます。それらをネストすることもできます。x, y, z
APP.bar()
APP.x
APP.bar()
APP.x
APP = (function() {
var x,y,z;
function foo() {}
function bar() {}
var WIDGETS = (function() {
var a,b,c;
function hello() {}
function world() {}
return {a:a, b:b, c:c, hello:hello, world:world};
})();
return {x:x, y:y, z:z, foo:foo: bar:bar, WIDGETS:WIDGETS};
})();
したがって、 のWIDGETS
変数にアクセスできますがAPP
、その逆はできません (APP.WIDGETS.hello
を使用できますfoo()
が、 を使用する必要がAPP.foo
ありますWIDGETS.hello()
)。
このパターンを ERB (私は Rails を使用しています) を使用して作成しようとしましたが、面倒でした。だから私はこれのために小さなソースからソースへのコンパイラを書くことを考えています.CoffeeScript(SASSの最小限の違い/拡張された言語哲学を持つ)のようなもので、いくつかの関数を代わりのjavascriptにコンパイルするだけです。
速記が欲しいだけです。
たとえば、これは上記の 2 番目のコード ブロックにコンパイルされます。
//NAMESPACE is a magical function I compile down to the long version in the second code block
APP = NAMESPACE(function() {
var x,y,z;
function foo() {}
function bar() {}
var WIDGETS = NAMESPACE(function() {
var a,b,c;
function hello() {}
function world() {}
//**notice the missing return statement that I don't need to manage and map to my variables**
});
//**notice the missing return statement that I don't need to manage and map to my variables**
});
シンプルで小さく、変数を追跡する必要がありません。また、このように名前空間を分離したい (複数のファイルに分割できるようにするため):
APP = NAMESPACE(function() {
var x,y,z;
function foo() {}
function bar() {}
//**notice the missing return statement that I don't need to manage and map to my variables**
});
APP = NAMESPACE(function() {
var WIDGETS = NAMESPACE(function() {
var a,b,c;
function hello() {}
function world() {}
//**notice the missing return statement that I don't need to manage and map to my variables**
});
});
これを行う方法について何か考えはありますか?すべてについてはわかりませんが、これがあれば、Javascript がもっと欲しいと思います。