Istnieją dwie główne części, które var FOO = FOO || {};obejmują.
# 1 Zapobieganie zastąpieniom
Wyobraź sobie, że Twój kod jest podzielony na wiele plików, a Twoi współpracownicy również pracują nad obiektem o nazwie FOO. Wówczas mogłoby to doprowadzić do przypadku, że ktoś już zdefiniował FOOi przypisał mu funkcjonalność (np. skateboardFunkcję). Wtedy nadpisałbyś go, gdybyś nie sprawdzał, czy już istnieje.
Problematyczny przypadek:
// 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!');
};
W tym przypadku skateboardfunkcja zniknie, jeśli załadujesz plik JavaScript homer.jspóźniej bart.jsw swoim HTML, ponieważ Homer definiuje nowy FOOobiekt (i tym samym zastępuje istniejący z Bartka), więc wie tylko o donutfunkcji.
Musisz więc użyć, var FOO = FOO || {};co oznacza „FOO zostanie przypisany do FOO (jeśli już istnieje) lub nowego pustego obiektu (jeśli FOO jeszcze nie istnieje).
Rozwiązanie:
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!');
};
Ponieważ Bart i Homer sprawdzają teraz istnienie FOOmetod, zanim zdefiniują swoje metody, możesz załadować bart.jsi homer.jsw dowolnej kolejności bez zastępowania metod innych (jeśli mają różne nazwy). Więc zawsze otrzymasz FOOobiekt, który ma metody skateboardi donut(Yay!).
# 2 Definiowanie nowego obiektu
Jeśli przeczytałeś pierwszy przykład, to już teraz wiesz, jaki jest cel || {}.
Ponieważ jeśli nie ma istniejącego FOOobiektu, przypadek OR stanie się aktywny i utworzy nowy obiekt, dzięki czemu możesz przypisać do niego funkcje. Lubić:
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};