Il y a deux parties principales qui var FOO = FOO || {};couvrent.
# 1 Empêcher les remplacements
Imaginez que votre code soit divisé sur plusieurs fichiers et que vos collègues travaillent également sur un objet appelé FOO. Ensuite, cela pourrait conduire au cas où quelqu'un a déjà défini FOOet affecté des fonctionnalités (comme une skateboardfonction). Ensuite, vous le remplaceriez, si vous ne vérifiiez pas s'il existe déjà.
Cas problématique:
// 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!');
};
Dans ce cas, la skateboardfonction disparaîtra si vous chargez le fichier JavaScript homer.jsaprès bart.jsdans votre HTML car Homer définit un nouvel FOOobjet (et remplace donc celui existant de Bart) afin qu'il ne connaisse que la donutfonction.
Vous devez donc utiliser var FOO = FOO || {};ce qui signifie "FOO sera assigné à FOO (s'il existe déjà) ou à un nouvel objet vide (si FOO n'existe pas déjà).
Solution:
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!');
};
Parce que Bart et Homer vérifient maintenant l'existence de FOOavant de définir leurs méthodes, vous pouvez charger bart.jset homer.jsdans n'importe quel ordre sans remplacer les méthodes de l'autre (si elles ont des noms différents). Ainsi, vous obtiendrez toujours un FOOobjet qui a les méthodes skateboardet donut(Yay!).
# 2 Définition d'un nouvel objet
Si vous avez lu le premier exemple, alors vous savez déjà quel est le but du || {}.
Parce que s'il n'y a pas d' FOOobjet existant, le cas OR deviendra actif et créera un nouvel objet, vous pouvez donc lui attribuer des fonctions. Comme:
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};