-
Notifications
You must be signed in to change notification settings - Fork 3
JavaScript: Modules
Написание скриптов помимо app.js должно быть модульным. Скрипт должен возвращать объект или функцию, и уже к возвращенному результату будут применяться какие-то действия, например в app.js - вызовы функций, использование переменных и т.д. Оборачивать такие модули следует по Universal Module Definition, в частности мы используем обертку AMD & Web.
Рассмотрим пример на классе Animal
(файл animal.js
).
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
} else {
root.Animal = factory(root.jQuery);
}
}(this, function ($) {
var Animal = function(name) {
this.name = name;
}
Animal.prototype.showName = function() {
$('#animal-name').text(this.name);
}
return Animal;
}));
Обертка позволяет нам как загрузить этот скрипт с помощью amd (requirejs), так и вставить его в head
с помощью тега script
.
Если у нас есть amd-загрузчик, то определяем зависимость нашего класса Animal
от jQuery
с помощью define
. Обращаем внимание, что jquery
написано маленькими буквами, так как в config.js она указывается именно так.
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
Если такого загрузчика нет (т.е. мы подключили файл через тег script
), то мы будем встраивать переменную Animal
в глобальную область видимости root.Animal
. При таком подключении в браузере root
- это window
. jQuery мы передаем фабрике в качестве аргумента, добиваясь модульности.
} else {
root.Animal = factory(root.jQuery);
}