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ł FOO
i przypisał mu funkcjonalność (np. skateboard
Funkcję). 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 skateboard
funkcja zniknie, jeśli załadujesz plik JavaScript homer.js
później bart.js
w swoim HTML, ponieważ Homer definiuje nowy FOO
obiekt (i tym samym zastępuje istniejący z Bartka), więc wie tylko o donut
funkcji.
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 FOO
metod, zanim zdefiniują swoje metody, możesz załadować bart.js
i homer.js
w dowolnej kolejności bez zastępowania metod innych (jeśli mają różne nazwy). Więc zawsze otrzymasz FOO
obiekt, który ma metody skateboard
i 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 FOO
obiektu, 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!');
};