My webapp основан на общем скрипте, где я определяю общие функции и глобальную переменную и динамически загружаемые скрипты, которые обрабатывают их. Пока единственный способ экспортировать глобальную переменную - заменить любое событие на window["myGlobalVar"]
, но я считаю это очень уродливым. Есть ли лучший способ сделать это?Компилятор Javascript Closure -Exporting global variables
Вот иллюстрация
// commonscript.js before compilation
function incrementVariable() {window["myGlobalVar"]++;}
window["incrementVariable"] = incrementVariable;
window["myGlobalVar"] = 0;
и в другом сценарии
alert(myGlobalVar); // <= alerts 0
incrementVariable();
alert(myGlobalVar); // <= alerts 1
Ищу способ использовать непосредственно myGlobalVar
в обоих файлах, потому что это было бы более элегантно. Тем не менее, мне нужно было бы установить window["myGlobalVar"]
указателю, а не копии объекта, и я не уверен, как это сделать на простых типах.
Возможно ли это? Является ли инкапсуляция myGlobalVar
в Object
единственным способом?
Большое спасибо за ваши огни.
Экспорт API всегда довольно неуклюжий в Closure.В этом случае лучше сделать 'myGlobalVar' частной обфускационной переменной и предоставить функцию GetMyGlobalVar. Таким образом, по крайней мере, вы уменьшаете экземпляры 'window [" myGlobalVar "]' везде в вашем коде. –
Экспорт ваших функций может быть проще, если вы используете глобальный объект пространства имен: 'window [" mynamespace "] = {" incrementVariable ": incrementVariable," getMyGlobalVar ": function() {return myGlobalVar}};' Тогда вы можете сделать: ' оповещение (mynamespace.getMyGlobalVar()); mynamespace.incrementVariable(); ... ' –
Спасибо, я подумал об этом, и я понял, насколько неудобно использовать глобальные переменные. Я поеду для функций getter и setter, которые предлагают гораздо больше гарантии по сравнению с глобальными. Я также предположил, что инкапсуляция в «Object» также не очень велика. У меня была бы такая же проблема с членами объекта, имена которых были бы запутаны. Мне все равно нужен геттер и сеттер. –