Недавно я рефакторил свой код JS и наткнулся на этот шаблон:
APP = (function() {
var x,y,z;
function foo() {}
function bar() {}
return {x:x, y:y, z:z, foo:foo: bar:bar};
})();
Преимущество этого в том, что он создает не -глобальные переменные, а функции имеют доступ ко всему, что определено в APP
. Таким образом, APP.foo
может получить доступ к x, y, z
и bar без ввода 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 (I'm on Rails ), но получилось беспорядочно.Так что я подумываю написать небольшой компилятор исходного кода -в -исходного кода для этого -что-то вроде CoffeeScript (с минимальной разницей/расширенной философией языка SASS ), который просто компилирует несколько функций для альтернативный джаваскрипт.
Мне просто нужна стенограмма.
Например, это скомпилирует мой второй блок кода выше:
//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 намного больше.