it-swarm.com.de

Wofür wird in JavaScript "define" verwendet (abgesehen vom Offensichtlichen)?

Ich habe hoch und niedrig nach Dokumentation zu diesem Thema gesucht, aber ich kann einfach nirgendwo etwas finden.

Ich verwende Aloha und möchte anhand des Sidebar-Prototyps eine eigene neue Seitenleiste erstellen, die mit anderen Plug-In-Funktionen verknüpft ist.

Ihre sidebar.js fängt damit an, aber ich kann für mein ganzes Leben keine Dokumentation finden, die erklärt, was es bedeutet.

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

In diesem Wrapper werden dann eine Reihe von Funktionen definiert, also vars und einige proptotypes-, mit denen ich mich gerade noch beschäftigen kann ...

Was ist das für ein Spruch oder wo finde ich eine Erklärung?

157

Ich kann nicht sicher sagen, ohne das gesamte Skript zu sehen, aber es ist wahrscheinlich die define -Funktion von RequireJS , insbesondere die " mit Abhängigkeiten definieren "Form dieser Funktion. Es wird verwendet, um ein "Modul" zu definieren:

Ein Modul unterscheidet sich von einer herkömmlichen Skriptdatei dadurch, dass es ein Objekt mit einem guten Gültigkeitsbereich definiert, mit dem vermieden wird, dass der globale Namespace verschmutzt wird. Es kann seine Abhängigkeiten explizit auflisten und einen Überblick über diese Abhängigkeiten erhalten, ohne auf globale Objekte verweisen zu müssen. Stattdessen erhält es die Abhängigkeiten als Argumente für die Funktion, die das Modul definiert.

Und die Form "Mit Abhängigkeiten definieren" von define wird wie folgt beschrieben:

Wenn das Modul Abhängigkeiten aufweist, sollte das erste Argument ein Array von Abhängigkeitsnamen und das zweite Argument eine Definitionsfunktion sein. Die Funktion wird aufgerufen, um das Modul zu definieren, sobald alle Abhängigkeiten geladen wurden. Die Funktion sollte ein Objekt zurückgeben, das das Modul definiert.

170
James Allardice

Dies ist das AMD-Muster zum Schreiben von Modulen, für das AMD Asynchrone Moduldefinition steht, wenn Sie Module im Grunde genommen asynchron importieren müssen und nicht so etwas wie commonJS.

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

Define verwendet ein Array von Abhängigkeiten. Wenn alle Abhängigkeiten nicht blockierend im Hintergrund (asynchron) geladen wurden, ruft Define den Rückruf auf, der wiederum Argumente akzeptiert (in diesem Fall die Abhängigkeiten).

Zu beachten ist auch, dass jedes dieser Module mit dem Schlüsselwort "define" definiert werden muss. So würde zum Beispiel module1 wie folgt definiert:

define([], function() {

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

Mit dieser Art des Schreibens von Modulen (AMD) können Sie unter Berücksichtigung der Browserkompatibilität schreiben (no require () wie in nodeJS) und Sie können viele Formate definieren, einschließlich Objekte, JSON usw., während commonJS beispielsweise Module als Objekte benötigt.

Denken Sie daran, AMD hat seine eigenen Nachteile. Hoffe das hilft jemandem.

2
TheeBen