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

Lesezeit: 3 Minuten

Benutzer-Avatar
David O’Sullivan

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

Ich verwende Aloha und möchte ihren Seitenleisten-Prototyp verwenden, um eine neue eigene Seitenleiste zu erstellen, die an andere Plugin-Funktionen angehängt ist.

Ihre sidebar.js beginnt damit, 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) {

Es geht dann in diesem Wrapper weiter, um eine Reihe von Funktionen zu definieren, also vars und einige proptotypes– was mir gerade noch einfällt…

Was sagt das oder wo finde ich eine Erklärung?

Ich kann es nicht mit Sicherheit sagen, ohne das gesamte Skript zu sehen, aber es ist wahrscheinlich das define Funktion von RequireJSinsbesondere die „mit Abhängigkeiten definieren” Form dieser Funktion. Sie wird verwendet, um ein “Modul” zu definieren:

Ein Modul unterscheidet sich von einer herkömmlichen Skriptdatei dadurch, dass es ein wohldefiniertes Objekt definiert, das eine Verschmutzung des globalen Namensraums vermeidet. Es kann seine Abhängigkeiten explizit auflisten und diese Abhängigkeiten in den Griff bekommen, ohne auf globale Objekte verweisen zu müssen, sondern stattdessen die Abhängigkeiten als Argumente für die Funktion erhalten, die das Modul definiert.

Und die Form “mit Abhängigkeiten definieren” von define wird wie folgt beschrieben:

Wenn das Modul Abhängigkeiten hat, 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.

  • ja, das ist es definitiv – also ist es Teil von require.js und um das Markup zu verwenden, das Sie brauchen requirejs.org

    – David O’Sullivan

    26. April 2012 um 11:01 Uhr

  • und welche IE-Versionen unterstützen das nicht… 😉

    – Simon_Weaver

    22. Mai 2014 um 19:56 Uhr

  • @Simon_Weaver – Ich bin mir nicht sicher, was du meinst … RequireJS wird unterstützt von IE6+.

    – James Allardice

    23. Mai 2014 um 11:07 Uhr

  • das ist gut zu wissen 🙂 Ich war etwas scherzhaft, aber ich dachte auch, dass dies ein neueres Konstrukt als IE6 sei

    – Simon_Weaver

    23. Mai 2014 um 11:10 Uhr

  • @Simon_Weaver Es ist kein Javascript-Sprachkonstrukt, es ist eine gewöhnliche Javascript-Funktion. Die eckigen Klammern bilden ein Array. Oder ist das das Konstrukt, auf das Sie sich bezogen haben?

    – Robin Grün

    21. Januar 2015 um 10:43 Uhr

Dies ist ein AMD-Muster zum Schreiben von Modulen, für das AMD für Asynchronous Module Definition steht, wenn Sie Module im Grunde asynchron importieren müssen, anstatt so etwas wie commonJS.

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

Define nimmt ein Array von Abhängigkeiten und sobald alle diese nicht blockierend im Hintergrund (asynchron) geladen sind, ruft define den Callback auf, der wiederum Argumente (in diesem Fall die Abhängigkeiten) akzeptiert.

Eine weitere zu beachtende Sache ist, dass jedes dieser Module auch mit dem Schlüsselwort “define” definiert werden muss. So würde beispielsweise module1 wie folgt definiert:

define([], function() {

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

Diese Art des Schreibens von Modulen (AMD) ermöglicht es Ihnen, mit Blick auf die Browserkompatibilität zu schreiben (kein require() wie in nodeJS) und Sie können auch viele Formate definieren, einschließlich Objekte, JSON usw., während CommonJS beispielsweise Module als Objekte benötigt.

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

1282990cookie-checkWofür wird „define“ in JavaScript verwendet (abgesehen vom Offensichtlichen)?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy