Компилятор замыкания экспортирует все прототипы и статические методы

Есть ли простой способ для компилятора закрытия экспортировать класс и все его прототипы и статические методы и сохранить имена в качестве общедоступного API? По умолчанию дополнительный параметр переименовывает все переменные, но вы можете экспортировать элементы в глобальную область, например:

window['MyClass'] = MyClass;

Однако это только экспортирует MyClass в глобальную область, все прототипы и статические методы переименовываются. Можно было бы подумать, что вы можете просмотреть прототипы и экспортировать их, но нет:

for (var i in MyClass.prototype) {
    window['MyClass'].prototype[i] = MyClass.prototype[i];
}

Это не работает. Единственный известный мне способ - добавить их вручную следующим образом:

window['MyClass'].prototype['myFunction'] = MyClass.prototype.myFunction;

Я хочу выставить около 50 прототипов, поэтому этот метод не является предпочтительным. Кто-нибудь знает, как удобно экспортировать весь класс?


person David Hellsing    schedule 14.02.2011    source источник


Ответы (2)


То, что вы описываете, на самом деле предназначено для externs: Закрытие компилятора от переименования объектов настроек

Вы можете увидеть пример большого файла externs здесь: http://code.google.com/p/closure-compiler/source/browse/trunk/contrib/externs/jquery-1.6.js

Вы можете опустить все комментарии и просто использовать такие утверждения, как:

jQuery.prototype.add = function(arg1, context) {};

Чтобы метод добавления не был переименован. Вам нужно либо включить @externs в комментарии к файлу externs, либо передать его как --externs компилятору Closure, чтобы все работало правильно.

person Chris Moschini    schedule 19.10.2011

Ознакомьтесь с аннотацией @export, которая описана в руководстве по стилю JavaScript: http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Comments#Comments

person Daniel Steigerwald    schedule 14.02.2011
comment
Да, я читал об этом, но вам нужно включить Google Closure, чтобы это работало, или есть обходной путь? - person David Hellsing; 15.02.2011