Модули являются неотъемлемой частью любого мощного приложения и часто помогают нам четко разделять и организовывать кодовые единицы в проектах.
Методы реализации модулей в JS:
1. объект буквального представления
2. Модульный режим
3. AMD модуль
4. Commonjs Module
5. Ecmascript Harmony Module
Объект буквального
Литералы объектов не должны быть созданы с использованием нового оператора, но не могут использоваться в начале утверждения, потому что начало может быть интерпретировано как начало блока. За пределами объекта новые участники могут быть добавлены в буквальный объект, используя следующее оператор назначения, mymodule.property = "somevalue".
var mymodule = {myproperty: "somevalue", myConfig: {useCaching: true, язык: "en"}, // базовый метод mymethod: function () {// ...}, // вывода информация на основе текущей конфигурации mymethod2: function () {console.log ("caching is:"+(это. «включен»: «отключен»); }, // переписать текущую конфигурацию mymethod3: function (newConfig) {if (typeof newConfig === "Object") {this.myconfig = newConfig; console.log (this.myconfig.language); }},}; mymodule.mymethod3 ({language: "fr", usecaching: false})Использование объектных литералов помогает инкапсулировать и организовать код.
В JavaScript шаблон модуля используется для дальнейшего имитации концепции классов, в каком способе отдельный объект может иметь публичные/частные методы и переменные, тем самым блокируя специальные детали из глобальной области.
Модульный шаблон использует закрытие для инкапсуляции «частного» состояния и организации. Он предоставляет способ обернуть смесь государственных/частных методов и переменных, чтобы предотвратить утечки в глобальном объеме и конфликты с интерфейсами других разработчиков. В этом режиме вам нужно только вернуть публичный API, а все остальное поддерживается в частном закрытии.
В режиме модуля, из -за наличия закрытия, объявленные переменные и методы доступны только в режиме, но переменные и методы, определенные на объекте возврата, доступны для внешних пользователей.
Реализация модуля режима
var testmodule = (function () {var counter = 0; return {urcementCounter: function () {return ++ counter;}, resetCounter: function () {console.log ("Сравнение до сброса" +countercoun testmodule.resetCounter ();Другая часть кода заключается в том, что IncrementCounter () и ResetCounter () не может быть прочитана напрямую. Переменная счетчика на самом деле полностью изолирована от глобальной области, поэтому она действует как частная переменная, существование которой ограничено закрытием модуля, поскольку единственный код, который может получить доступ к его объему, - это две функции. Приведенный выше метод эффективно устанавливает пространство имен, поэтому в тестовом коде все вызовы должны быть префикса.
// режим модуля, содержащий пространство имен, публичные и частные переменные var mymamspace = (function () {// private counter -переменная var myprivatevar = 0; // частная функция var myprivatemethod = funct mypublicfunction: function (bar) {myprivatevar ++;Ссылка на глобальные переменные
JavaScript имеет функцию, называемую неявными глобальными переменными. Независимо от того, использовалась ли переменная или нет, интерпретатор JavaScript реверсирует цепочку областей, чтобы найти объявление VAR всей переменной. Если VAR не найден, интерпретатор предполагает, что переменная является глобальной переменной. Если переменная используется для операции назначения, если она не существует ранее, интерпретатор автоматически создаст ее. Это означает, что он очень прост в использовании или создании глобальных переменных в анонимных закрытиях, но более сложная задача - это то, что код трудно управлять, особенно когда люди, которые читают код, видят много различий между тем, какие переменные являются глобальными, а какие являются локальными.
К счастью, в анонимных функциях мы можем предоставить относительно простую альтернативу. Мы можем передать глобальные переменные в анонимные функции в качестве параметра и использовать их. По сравнению с неявными глобальными переменными, это ясно и быстро. Давайте приведем пример:
// Глобальный модуль var mymodule = (function (jq, _) {function privatemethod1 () {jq (". Container"). Html (test);} return {publicmethod: function () {privatemethod1 ();}}}) (jquery, _); mymodule.publicmethod (); // Глобальный модуль var mymodule = (function () {// объект модуля var module = {}; privatevariale = "hello"; function privatemethod () {//...} module.publicproperty = "foobar"; module.publicemethod = function () atroperty);Объявите глобальные переменные без их реализации, а также могут поддерживать концепцию глобального введения
В режиме модуля все еще есть определенные недостатки:
1. Поскольку мы получаем доступ к государственным и частным членам по -разному, когда мы хотим изменить видимость, мы на самом деле должны изменить каждое существование, которое когда -либо использовало этот участник.
2. Мы не можем получить доступ к этим частным участникам, добавленным к методу позже.
3. Невозможно создать автоматизированные модульные тесты для частных участников, и дополнительная сложность добавляется, когда необходимо исправить ошибки.
4. Разработчики не могут легко расширить частные методы
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.