init
не сокращается по той же причине test
не сокращается ... потому что это часть публичного API вашего кода.
Когда вы вызываете var t = new test()
, вы создаете объект, который выглядит следующим образом:
{
init: function() { ... },
prototype: test
}
и вы можете позвонить t.init()
. Если компилятор не учитывает те переменные, которые доступны из глобальной области видимости, вам придется встроить все вашего кода JavaScript в один файл, прежде чем вы его минимизируете. В противном случае, каждый раз, когда вы минимизируете test.js
имя публичной функции test
, будет меняться. Итак, этот код:
<script type="text/javascript" src="js/test.min.js"></script>
<script type="text/javascript">
var t = new test();
t.init();
</script>
сломается (потому что test
будет , вероятно, будет изменен на a
с помощью минификатора и инициализирует какую-то другую букву.)
Что касается второй части вашего вопроса, когда вы делаете this.init = function
, вы устанавливаете атрибут для неопределенного объекта (это может быть что угодно, поскольку this
устанавливается во время вызова в JavaScript, и вы объявляете его внутри функции test
). Когда вы пишете function init(){}
, вы пишете объявление функции , которое будет поднято в верхнюю часть охватывающей области (то есть вы можете вызвать его внутри области, в которой оно определено, до того, как вы определил его.) Однако он не будет доступен за пределами test
.