Как создать небольшой язык расширения Javascript?

Недавно я рефакторил свой код 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 намного больше.

8
задан JasonMArcher 3 August 2015 в 16:13
поделиться