Вопрос по javascript – Для чего используется «определение» в JavaScript (кроме очевидного)?

153

Я искал документацию по этому вопросу, но просто нигде не могу найти.

Я использую Aloha и хочу использовать их прототип боковой панели для создания новой собственной боковой панели, присоединенной к другим функциям плагина.

Their sidebar.js начинается с этого, но я никак не могу найти документацию, объясняющую, что это значит.

<code>define( [
    'aloha/core',
    'aloha/jquery',
    'aloha/selection'
], function (Aloha, jQuery, Selection, Plugin) {
</code>

Затем в этой оболочке происходит определение набора функций, поэтомуvars и немногоproptotypes - что я могу просто обдумать ...

Что это за поговорка или где найти объяснение?

Добавить ссылку на sidebar.js Denis Ermolin

Ваш Ответ

2   ответа
167

не увидев весь сценарий, но, скорее всего, это будетdefine функция от RequireJS, в частности " определить с зависимостями "форма этой функции. Она используется для определения" модуля ":

одуль @A отличается от традиционного файла сценария тем, что он определяет объект с хорошей областью действия, который предотвращает загрязнение глобального пространства имен. Он может явно перечислить свои зависимости и получить указатель на эти зависимости, не обращаясь к глобальным объектам, но вместо этого получает зависимости в качестве аргументов функции, которая определяет модуль.

И форма «определить с зависимостями»define описывается следующим образом:

Если у модуля есть зависимости, первый аргумент должен быть массивом имен зависимостей, а второй аргумент должен быть функцией определения. Функция будет вызываться для определения модуля после загрузки всех зависимостей. Функция должна возвращать объект, который определяет модуль.

и какие версии IE не поддерживают это ...; -) Simon_Weaver
Да, это определенно так, поэтому он является частью require.js и для использования этой разметки вам нужно Requirejs.org David O'Sullivan
@ Simon_Weaver Это не языковая конструкция Javascript, это обычная функция Javascript. Квадратные скобки создают массив. Или это та конструкция, на которую вы ссылались? Robin Green
@ Simon_Weaver - Не знаю, что вы имеете в виду ... RequireJS поддерживается IE6 +. James Allardice
это приятно знать :) Я был немного шутлив, но я также подумал, что это более новая конструкция, чем IE6 Simon_Weaver
0

который 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 есть свои недостатки. Надеюсь, это кому-нибудь поможет.

Похожие вопросы