2013-02-21 4 views
5

Если у меня есть модуль с общественным членом и я использую его как этотСтатический импорт в JavaScript

Module.Sub.member() 

Тогда что является лучшим (если она существует) способ статического импорта элемент в локальной области, как using в cpp или import static в Java?

ответ

13
var App = (function(app) { 

    /* Dependencies */ 
    var Sound = app.Modules.Sound,   
     Input = app.Modules.IO.Input, 
     ... 

    /* Actual code using dependecies */ 
    ...  


})(App || {}); 

Это решение имеет ряд преимуществ:

  • Заявлено в верхней части модуля, это отчетливо видно на первый взгляд (ремонтопригодны код),

  • Обычные преимущества импорта : меньше набрав, избегайте столкновений пространства имен и т. д. (код поддержки)

  • путь Длинные собственности просмотровых окон (a.b.c.d) потребуется только один раз (производительность),

  • Использование локальной переменной быстрее, что с помощью глобальной переменной - более быстрые взгляды вверх (производительность) ,

  • Инструменты для минимизации могут безопасно изменять локальные имена переменных, но не могут тривиально минимизировать глобальные переменные.

2

Что-то вроде

member = Module.Sub.member; 

возможно? Однако будьте осторожны, поскольку он загромождает свойства глобального объекта и даже может переписать некоторые из них, поскольку у вас нет понятия «единицы компиляции», к которому статический импорт привязан к Java. Вместо этого у вас есть одно динамическое состояние выполнения вашей виртуальной машины, поэтому приведенное выше предложение не является декларативным, а обязательным для вас способом достижения ваших целей.

Насколько я знаю, нет никакого способа декларативно достичь той же цели, что и import static.

2

Это подход, который я нашел достаточно красив, чтобы указать на:

(function(member) { 
    //Your code here will see member in this scope. 
}) (Module.Sub.member); 

Надеется, что это помогает.

+0

В чем разница между '(function() {...}())' и '(function() {...})()'? –

+1

@JoshuaMN '(function() {...}())' недействителен javascript. '(function() {...})()' эквивалентно: 'var f = function() {...}; F(); ' – sitifensys

Смежные вопросы