Я пишу различные файлы в JavaScript Модуль Patern так:модуль JavaScript шаблон файлов конкатенацию в один файл и использовать их функции
файл 1.js
var Module = (function (module) {
module.function = function() {
console.log(this.thirdFunction) // This is my issue. I cannot access the function from the third file because it is concatenated in a way that the function still not exist.
};
return module;
}(Module || {}));
некоторые папка/файл 2.js
var Module = (function (module) {
module.somethingElse = function() {
};
return module;
}(Module || {}));
независимо/файл 3.js
var Module = (function (module) {
module.thirdFunction = function() {
};
}(Module || {}));
Я положил все эти файлы в разных каталогах, имена в разное время. Затем я использую инструмент конкатенации, чтобы иметь один файл, а затем я использую его в своем html-файле. Но я столкнулся с проблемой, которую я не могу решить.
Чтобы все это работало, я должен включить их определенным образом и заказать функции вызова из того, что мне нужно, и переупорядочить файлы, когда что-то еще не определено/создано в возвращаемом конечном объекте. Если у меня будет 100 файлов и папок, это снова будет проблемой для меня.
Я понимаю это право: http://gruntjs.com/configuring-tasks#globbing-patterns , что у меня есть возможность вручную заказывать файлы, папки и все в моих задачах для ворчания?
Я не хочу использовать инструменты AMD, просто файлы JavaScript и некоторый подход к взлому требований к заказу. Если для вас нет какой-либо легкой идеи, я бы попробовал инструменты AMD, такие как require.js, но я не уверен, что эти инструменты помогут справиться с этой хромой проблемой. Я был бы признателен за некоторые инструменты для ворчания, некоторые условные обозначения имен файлов и папок, все, что не заставило бы меня устанавливать все больше и больше инструментов. Спасибо заранее!
Другое дело, что меня беспокоит следующее:
Если я хочу, чтобы изолировать код, но я не должен возвращать свойство объекта в конечном объекте, это хорошо, чтобы сделать что-то вроде этого:
файл 4.js
var Module = (function (module) {
var someThing = Module.somethingElse() // from file 2.js
and then using someThing here for clicking, DOM rendering, etc, etc
}(Module || {}));
это глупо придерживаться тех же var Module
конвенции для файлов, где я на самом деле ничего не возвращают? Я просто думаю о том, как избежать названия объекта и снова использовать this
Спасибо, GMchris! Можете ли вы рассказать мне о моей дилемме из последнего абзаца? Btw, если вы использовали IE6 с модульным импортом, может ли это как-то исправить эту проблему, или она будет такой же там? –
Вы имеете в виду использование var Module, если вы ничего не возвращаете? Основная часть модулей заключается в том, чтобы сохранить глобальное пространство имен в чистоте и что вы можете решить, что является общедоступным и частным, что вы все еще можете сделать, просто связав все, что должно быть общедоступным для объекта Module, хотя настоятельно рекомендуется, чтобы вы используйте return {// Все ваши публичные члены}; вместо. Модуль без возврата - это просто закрытие. И это очень удобно для инициализации и настройки событий и их обработчиков. Что касается IE6, я боюсь, что я не знаю достаточно на эту тему, чтобы действительно помочь. – GMchris
Итак, вы бы посоветовали кому-то воспользоваться этим «Модуль без возврата - это просто закрытие. И это очень удобно для инициализации и настройки событий и их обработчиков». или нет? Я не понял. 'var MyDOs = (function (module) {...' с возвратом ничего или: '(function() {...' –