Es gibt zwei Hauptteile, die var FOO = FOO || {};abdecken.
# 1 Überschreibungen verhindern
Stellen Sie sich vor, Sie haben Ihren Code auf mehrere Dateien aufgeteilt und Ihre Mitarbeiter arbeiten auch an einem Objekt namens FOO. Dann könnte es zu dem Fall kommen, dass jemand bereits FOOFunktionen definiert und zugewiesen hat (wie eine skateboardFunktion). Dann würden Sie es überschreiben, wenn Sie nicht prüfen würden, ob es bereits existiert.
Problematischer Fall:
// Definition of co-worker "Bart" in "bart.js"
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};
// Definition of co-worker "Homer" in "homer.js"
var FOO = {};
FOO.donut = function() {
alert('I like donuts!');
};
In diesem Fall wird die skateboardwird Funktion weg , wenn Sie die JavaScript - Datei laden , homer.jsnachdem bart.jsin Ihrem HTML , weil Homer ein neues definiert FOOObjekt (und damit überschreibt die bestehenden von Bart) , so dass es nur über die weiß - donutFunktion.
Sie müssen var FOO = FOO || {};also Folgendes verwenden : "FOO wird FOO zugewiesen (sofern es bereits vorhanden ist) oder einem neuen leeren Objekt (falls FOO noch nicht vorhanden ist).
Lösung:
var FOO = FOO || {};
// Definition of co-worker Bart in bart.js
FOO.skateboard = function() {
alert('I like skateboarding!');
};
// Definition of co-worker Homer in homer.js
var FOO = FOO || {};
FOO.donut = function() {
alert('I like donuts!');
};
Da Bart und Homer sind nun für die Existenz der Überprüfung , FOObevor sie ihre Methoden definieren, können Sie laden bart.jsund homer.jsin beliebiger Reihenfolge ohne zwingende jeweils andere Methoden (wenn sie unterschiedliche Namen haben). Sie erhalten also immer ein FOOObjekt mit den Methoden skateboardund donut(Yay!).
# 2 Ein neues Objekt definieren
Wenn Sie das erste Beispiel durchgelesen haben, dann wissen Sie schon jetzt, wozu das dient || {}.
Wenn kein FOOObjekt vorhanden ist, wird der ODER-Fall aktiv und erstellt ein neues Objekt, sodass Sie ihm Funktionen zuweisen können. Mögen:
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};