Для чего используется "определение" в JavaScript (кроме очевидного)?
Я искал документацию по этому вопросу, но просто нигде не могу ничего найти.
Я использую Aloha и хочу использовать их прототип боковой панели для создания новой собственной боковой панели, присоединенной к другим функциям плагина.
Их sidebar.js начинается с этого, но я не могу найти документацию, которая объясняет, что это значит.
define( [
'aloha/core',
'aloha/jquery',
'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {
Затем в этой оболочке происходит определение набора функций, поэтому vars
и немного proptotypes
- что я могу просто получить голову вокруг...
Что это говорит или где я могу найти объяснение?
1 ответ
Я не могу сказать наверняка, не видя весь сценарий, но это, вероятно, будет define
функция из RequireJS, в частности, форма " определить с зависимостями" этой функции. Он используется для определения "модуля":
Модуль отличается от традиционного файла сценария тем, что он определяет объект с хорошей областью действия, который предотвращает загрязнение глобального пространства имен. Он может явно перечислить свои зависимости и получить указатель на эти зависимости, не обращаясь к глобальным объектам, но вместо этого получает зависимости в качестве аргументов функции, которая определяет модуль.
И форма "определить с зависимостями" define
описывается следующим образом:
Если у модуля есть зависимости, первый аргумент должен быть массивом имен зависимостей, а второй аргумент должен быть функцией определения. Функция будет вызываться для определения модуля после загрузки всех зависимостей. Функция должна возвращать объект, который определяет модуль.
Это шаблон AMD для написания модулей, который AMD обозначает "Определение асинхронных модулей", когда вам нужно импортировать модули асинхронно, а не как что-то вроде commonJS.
define(['module1', 'module2'], function(module1, module2) {
console.log(module1.sayHi());
});
Define принимает массив зависимостей, и как только все они загружаются в фоновом режиме (асинхронно) неблокирующим способом, define вызывает callback, который, в свою очередь, принимает аргументы (в данном случае зависимости).
Следует также отметить, что каждый из этих модулей также должен быть определен с помощью ключевого слова define. Так, например, module1 будет определен так:
define([], function() {
return {
sayHi: function() {
console.log('Hi Hi');
},
};
});
Этот способ написания модулей (AMD) позволяет вам писать с учетом совместимости браузера (без require(), как в nodeJS), а также вы можете определять множество форматов, включая объекты, JSON и т. Д., В то время как, например, commonJS требует, чтобы модули были объектами.
Имейте в виду, у AMD есть свои недостатки. Надеюсь, это кому-нибудь поможет.