Existem duas partes principais que var FOO = FOO || {};
cobrem.
# 1 Prevenção de substituições
Imagine que você tem seu código dividido em vários arquivos e seus colegas de trabalho também estão trabalhando em um objeto chamado FOO
. Então, isso pode levar ao caso de alguém já ter definido FOO
e atribuído uma funcionalidade a ele (como uma skateboard
função). Em seguida, você o substituiria, se não estivesse verificando se ele já existe.
Caso problemático:
// 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!');
};
Nesse caso, a skateboard
função desaparecerá se você carregar o arquivo JavaScript homer.js
depois bart.js
em seu HTML, porque Homer define um novo FOO
objeto (e, portanto, substitui o existente de Bart), então ele só sabe sobre a donut
função.
Portanto, você precisa usar o var FOO = FOO || {};
que significa "FOO será atribuído a FOO (se já existir) ou um novo objeto em branco (se FOO ainda não existir).
Solução:
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!');
};
Como Bart e Homer agora estão verificando a existência de FOO
antes de definirem seus métodos, você pode carregar bart.js
e homer.js
em qualquer ordem, sem substituir os métodos um do outro (se eles tiverem nomes diferentes). Assim, você sempre obterá um FOO
objeto que possui os métodos skateboard
e donut
(Yay!).
# 2 Definindo um novo objeto
Se você leu o primeiro exemplo, então sabe qual é o propósito do || {}
.
Porque se não houver nenhum FOO
objeto existente , o caso OR se tornará ativo e criará um novo objeto, para que você possa atribuir funções a ele. Gostar:
var FOO = {};
FOO.skateboard = function() {
alert('I like skateboarding!');
};