2016-07-24 13 views
0

Als erstes habe ich vor langer Zeit eine Menge Hilfe von dieser Website bekommen, obwohl ich mich gerade erst registriert habe. Danke für all die Leute, die ihr Wissen hier teilen !!javascript "=>" operator

Ich fange gerade an, Javascript für eine Woche zu lernen, um ein firefox Addon zu bauen, also bitte bare mit mir und Entschuldigung für meine noobish Fragen und soso englische Grammatik.
https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Unit_testing
im obigen Link von MDN, erklärt es, wie man einen Komponententest für die Entwicklung eines Addons für Firefox schreibt. Es gibt jedoch einige Segmente, die ich nicht verstehe und die nach Google-Suche kein brauchbares Ergebnis gefunden haben.
Die erste:
die folgende ist ein Absatz von oben Link qauted:

In einer Web-Seite können Sie Base64-Codierung und Decodierung mit dem btoa() und atob() Funktionen ausführen. Leider sind diese Funktionen an das Window-Objekt angehängt: Da dieses Objekt in Ihren Haupt-Add-On-Code nicht verfügbar ist, sind auch atob() und btoa() nicht verfügbar. So erstellen wir ein Base64-Modul, um diese Funktionen von der -Plattform verfügbar zu machen (siehe Erstellen wiederverwendbarer Module).

Was bedeutet "die Plattform" im obigen Absatz? die "Dienste.jsm"?
Auch in dem folgenden Code: const { atob, btoa } = require("resource://gre/modules/Services.jsm");

dies macht atob und btoa als eine der Dienstleistungen, die für andere Klasse verfügbar ist? oder make (konstante Variablen) atob und btoa beziehen sich beide auf die Services.jsm?

Die zweite: Was tun diese beiden Zeilen Code?
exports.atob = a => atob(a);<br /> exports.btoa = b => btoa(b);
Ich verstehe den Teil
exports.atob
die atob Funktion von anderen Klassen außerhalb der „base64.js“ zur Verfügung stehen kann.
aber was bedeutet das?
= a => atob(a);
Ich habe nicht gefunden, dass Javascript "=>" Operator hat!

Aus meiner Grund ist der Grund, warum wir eine Base64.js erstellen, weil Atob und Btoa nur aufgerufen werden können, wenn wir das Fensterobjekt haben. Daher können wir Services.jsm verwenden, um eine Referenz des Fensterobjekts zu erhalten?

Vielen Dank im Voraus!

Antwort

0

Für "Plattform" in dem Absatz, die Sie zitiert haben, bedeuten sie die Reihe von Funktionen, die nicht ausschließlich Firefox-Browser-Code, sondern implementiert grundlegende, teilen Funktionen. Dieser befindet sich normalerweise im zentralen Mozilla-Repository in toolkit/modules. Services.jsm lebt auch dort, ja, das ist Teil der Plattform. Außerdem werden atob und btoa beide aus Services.jsm importiert.

Der Pfeil => in exports.atob = a => atob(a); definiert, was eine arrow function genannt wird: es ist eine neue, kürzere Syntax zum Definieren von Funktionen in JavaScript. This SO Antwort hat viele nützliche Informationen darüber.

Aus meiner Sicht ist der Grund, warum wir eine Base64.js erstellen, weil Atob und Btoa nur aufgerufen werden können, wenn wir das Fensterobjekt haben. Daher können wir Services.jsm verwenden, um eine Referenz des Fensterobjekts zu erhalten?

Das ist fast richtig: Sie müssen die Funktion von der zugrunde liegenden Plattform exportieren, da Sie dort kein Fensterobjekt haben. Wenn Sie ein Fensterobjekt hätten, hätten Sie einfach window.atob oder etwas ähnliches getan. Dieser Aufruf hätte immer noch dieselbe Funktion aufgerufen, die Sie von Services.jsm importiert haben.

Sie verwenden also nicht Services.jsm, um einen Verweis auf das Fensterobjekt zu erhalten, sondern importieren direkt die benötigten Funktionen, sodass Sie kein Fensterobjekt benötigen.

+0

Vielen Dank für Ihre ausführliche Erklärung!
Kann ich sagen, dass Services.jsm die Brücke ist, um alle Funktionen zu exportieren, die an die https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/btoa windowbase64 binden? – ganor

+0

Grrrr ... Ich kann nur Kommentare für 5 Minuten bearbeiten, sorry für diesen folgenden Kommentar! also kann ich sagen Services.jsm kann verwendet werden, um alle Funktionen zu exportieren, die nicht ohne Fensterobjekte verfügbar sind? oder es ist eine Fall-für-Fall-Situation? Ich kann nicht glauben, dass das '=>' zuvor auf dem Forum beantwortet wurde! Ich habe "=>" gesucht und nichts ist aufgetaucht ... wirklich zu schätzen! – ganor

+0

Kein Problem! Services.jsm kann verwendet werden, um alle dort definierten Funktionen zu exportieren, die alle Funktionen sein können oder auch nicht. – Dexter