Ci sono due parti principali che var FOO = FOO || {};copre.
# 1 Prevenire gli override
Immagina di avere il tuo codice suddiviso su più file e anche i tuoi colleghi stanno lavorando su un oggetto chiamato FOO. Quindi potrebbe portare al caso che qualcuno abbia già definito FOOe assegnato una funzionalità (come una skateboardfunzione). Quindi lo sovrascriveresti, se non stavi controllando se esiste già.
Caso problematico:
// 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 questo caso la skateboardfunzione sparirà se carichi il file JavaScript homer.jsdopo bart.jsnel tuo HTML perché Homer definisce un nuovo FOOoggetto (e quindi sovrascrive quello esistente da Bart) quindi conosce solo la donutfunzione.
Quindi è necessario utilizzare var FOO = FOO || {};che significa "FOO verrà assegnato a FOO (se esiste già) o un nuovo oggetto vuoto (se FOO non esiste già).
Soluzione:
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!');
};
Poiché Bart e Homer ora stanno verificando l'esistenza di FOOprima di definire i loro metodi, puoi caricare bart.jse homer.jsin qualsiasi ordine senza sovrascrivere i metodi dell'altro (se hanno nomi diversi). Quindi otterrai sempre un FOOoggetto che ha i metodi skateboarde donut(Yay!).
# 2 Definizione di un nuovo oggetto
Se hai letto il primo esempio, hai già capito qual è lo scopo del file || {}.
Perché se non c'è un FOOoggetto esistente , il caso OR diventerà attivo e creerà un nuovo oggetto, così potrai assegnargli delle funzioni. Piace:
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};