Для чого використовується "визначити" в JavaScript (окрім очевидного)?


161

Я шукав документацію щодо цього високо і низько, але ніде нічого не можу знайти.

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

Їх sidebar.js починається з цього, але я не можу за все життя знайти жодної документації, яка б пояснювала, що це означає.

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

Потім він продовжує в цій обгортці, щоб визначити купу функцій, так varsі деякі proptotypes- про які я просто можу опустити голову ...

Що це за приказка чи де я можу знайти пояснення?


Відповіді:


173

Я не можу сказати точно, не побачивши весь сценарій, але це, ймовірно, defineфункція з RequireJS , зокрема форма " визначити залежностями " цієї функції. Він використовується для визначення "модуля":

Модуль відрізняється від традиційного файлу скриптів тим, що він визначає чітко визначений об'єкт, який уникає забруднення глобального простору імен. Він може явно перелічити свої залежності та отримати обробку цих залежностей без необхідності посилатися на глобальні об'єкти, а натомість отримати залежності як аргументи функції, що визначає модуль.

А форма "визначити залежність" defineописана так:

Якщо модуль має залежності, перший аргумент повинен бути масивом імен залежностей, а другий аргумент - функцією визначення. Буде викликана функція для визначення модуля після завантаження всіх залежностей. Функція повинна повертати об'єкт, який визначає модуль.


1
так, це, безумовно, так, тож його частина Requ.js, і щоб використовувати цю розмітку, вам потрібен Requjs.org
Девід О'Салліван,

4
і які версії IE це не підтримують ... ;-)
Simon_Weaver

1
@Simon_Weaver - Не впевнений, що ти маєш на увазі ... RequireJS підтримується IE6 + .
Джеймс Еллардіс

це добре знати :) Я був дещо вибагливим, але я також подумав, що це більш нова конструкція, ніж IE6
Simon_Weaver

1
@Simon_Weaver Це не конструкція мови Javascript, це звичайна функція Javascript. Квадратні дужки створюють масив. Або це та конструкція, про яку ви мали на увазі?
Робін Грін

3

Це схема AMD для написання модулів, для якої AMD означає визначення асинхронного модуля, коли вам потрібно імпортувати модулі async, а не щось на зразок commonJS.

define(['module1', 'module2'], function(module1, module2) {
  console.log(module1.sayHi());
});

Визначте приймає масив залежностей і як тільки всі вони завантажуються у фоновому режимі (асинхронізують) не блокуючим способом, визначте зворотний виклик, який, у свою чергу, приймає аргументи (у цьому випадку залежності).

Ще слід зазначити, що кожен з цих модулів також повинен бути визначений за допомогою ключового слова "визначити". Так, наприклад, module1 буде визначено як нижче:

define([], function() {

  return {
    sayHi: function() {
      console.log('Hi Hi');
    },
  };
});

Цей спосіб запису модулів (AMD) дозволяє писати з урахуванням сумісності браузера (не вимагає (), як у nodeJS), а також ви можете визначати багато форматів, включаючи об'єкти, JSON тощо, тоді як, наприклад, commonJS потребує модулів, щоб бути об'єктами.

Майте на увазі, AMD має власні падіння. Сподіваюся, що це комусь допоможе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.