Модули
Два ключевых понятия, которые вы должны знать вот идея определяют метод для облегчения определения модуля и требуют метод обработки загрузки зависимостей. определяет используются для определения имени или безымянные модулей на основе предложений, используя следующую подпись:
define(
module_id /*optional*/,
[dependencies] /*optional*/,
definition function /*function for instantiating the module or object*/
);
Как вы можете сказать по инлайн комментариев MODULE_ID является необязательным аргументом, который, как правило, требуется только когда не-AMD конкатенации используются инструменты (могут быть и другие граничные случаи, где это тоже полезно). Когда этот аргумент опущен, мы вызываем анонимный модуль.
При работе с анонимными модулями идея идентичности модуля DRY делает его тривиальным, чтобы избежать дублирования имен файлов и кода. Поскольку код более переносимый, его можно легко перемещать в другие места (или вокруг файловой системы) без необходимости изменять сам код или изменять его идентификатор. Модуль_id эквивалентен путям папок в простых пакетах и не используется в пакетах. Разработчики также могут запускать один и тот же код в нескольких средах, просто используя оптимизатор AMD, который работает с средой CommonJS, такой как r.js.
Назад к определению подписи, аргумент зависимостей представляет собой массив зависимостей, которые требуются определяемым модулем, а третий аргумент (функция определения) - это функция, выполняемая для создания экземпляра вашего модуля. Модуль Barebone может быть определен следующим образом:
// A module_id (myModule) is used here for demonstration purposes only
define('myModule',
['foo', 'bar'],
// module definition function
// dependencies (foo and bar) are mapped to function parameters
function (foo, bar) {
// return a value that defines the module export
// (i.e the functionality we want to expose for consumption)
// create your module here
var myModule = {
doStuff:function(){
console.log('Yay! Stuff');
}
}
return myModule;
});
// An alternative example could be..
define('myModule',
['math', 'graph'],
function (math, graph) {
// Note that this is a slightly different pattern
// With AMD, it's possible to define modules in a few
// different ways due as it's relatively flexible with
// certain aspects of the syntax
return {
plot: function(x, y){
return graph.drawPie(math.randomGrid(x,y));
}
}
};
});
требует с другой стороны, как правило, используются для загрузки коды в верхнем уровне JavaScript файла или в модуле должны вы хотите, чтобы динамически получать зависимости.
// Consider 'foo' and 'bar' are two external modules
// In this example, the 'exports' from the two modules loaded are passed as
// function arguments to the callback (foo and bar)
// so that they can similarly be accessed
require(['foo', 'bar'], function (foo, bar) {
// rest of your code here
foo.doSomething();
});
надеюсь, что это полезно для вас ...
И каков ваш вопрос? Вы не можете ссылаться на свойства объекта во время определения. –
Возможный дубликат [Саморекламы в объявлениях литералов объекта] (http://stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations) –