Do czego służy „definicja” w JavaScript (poza oczywistym)?

161

Szukałem wysoko i nisko dokumentacji na ten temat, ale po prostu nie mogę nigdzie znaleźć.

Używam Aloha i chcę użyć ich prototypu paska bocznego, aby utworzyć nowy własny pasek boczny, dołączony do innych funkcji wtyczki.

Ich sidebar.js zaczyna się od tego, ale nie mogę znaleźć żadnej dokumentacji wyjaśniającej, co to znaczy.

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

Następnie odbywa się w tym opakowaniu, aby zdefiniować kilka funkcji, varsa więc i niektóreproptotypes - które mogę po prostu omówić ...

Co to za powiedzenie lub gdzie mogę znaleźć wyjaśnienie?

David O'Sullivan
źródło

Odpowiedzi:

173

Nie mogę powiedzieć na pewno, nie widząc całego skryptu, ale prawdopodobnie będzie to definefunkcja z RequireJS , w szczególności forma tej funkcji „ zdefiniuj z zależnościami ”. Służy do zdefiniowania „modułu”:

Moduł różni się od tradycyjnego pliku skryptu tym, że definiuje obiekt o dobrze określonym zakresie, który zapobiega zanieczyszczaniu globalnej przestrzeni nazw. Może jawnie wymienić swoje zależności i uzyskać uchwyt do tych zależności bez konieczności odwoływania się do obiektów globalnych, ale zamiast tego otrzymuje zależności jako argumenty funkcji, która definiuje moduł.

Forma „definiuj za pomocą zależności” definejest opisana w następujący sposób:

Jeśli moduł ma zależności, pierwszy argument powinien być tablicą nazw zależności, a drugi argument powinien być funkcją definicji. Funkcja zostanie wywołana w celu zdefiniowania modułu po załadowaniu wszystkich zależności. Funkcja powinna zwrócić obiekt, który definiuje moduł.

James Allardice
źródło
1
tak, to zdecydowanie to - więc jest to część require.js i aby użyć tego znacznika, potrzebujesz requirejs.org
David O'Sullivan
4
a które wersje IE tego nie obsługują ... ;-)
Simon_Weaver
1
@Simon_Weaver - Nie jestem pewien, co masz na myśli ... RequireJS jest obsługiwana przez IE6 + .
James Allardice
dobrze wiedzieć :) Byłem trochę żartobliwy, ale pomyślałem też, że to nowsza konstrukcja niż IE6
Simon_Weaver
1
@Simon_Weaver To nie jest konstrukcja języka Javascript, to zwykła funkcja Javascript. Nawiasy kwadratowe tworzą tablicę. A może jest to konstrukcja, o której mówiłeś?
Robin Green
3

To jest wzorzec AMD do pisania modułów, który AMD oznacza Asynchronous Module Definition, kiedy musisz importować moduły w zasadzie asynchronicznie, a nie coś w rodzaju commonJS.

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

Define pobiera tablicę zależności i gdy wszystkie zostaną załadowane w tle (asynchroniczne) w sposób nieblokujący, definiuje wywołania zwrotne, które z kolei przyjmują argumenty (w tym przypadku zależności).

Kolejną rzeczą wartą odnotowania jest to, że każdy z tych modułów również musi być zdefiniowany za pomocą słowa kluczowego „define”. Na przykład moduł1 zostałby zdefiniowany jak poniżej:

define([], function() {

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

Ten sposób pisania modułów (AMD) pozwala na pisanie z uwzględnieniem zgodności z przeglądarkami (no require () jak w nodeJS), a także można zdefiniować wiele formatów, w tym obiekty, JSON itp., Podczas gdy na przykład commonJS potrzebuje modułów, aby były obiektami.

Pamiętaj, że AMD ma swoje wady. Mam nadzieję, że to komuś pomoże.

TheeBen
źródło