Armazenar uma variável no objeto JavaScript 'window' é uma maneira adequada de usar esse objeto?
(Talvez) acabei de resolver um problema meu (Como actualizar o conteúdo do front-end depois que um formulário é enviado com sucesso a partir de uma janela de diálogo?) por "armazenar" / "salvar"uma variável no objecto JavaScript window
. No entanto, como sou novato em assuntos JavaScript, Tenho algumas dúvidas se armazenar / salvar uma variável no objeto JavaScript window
é uma forma "comum" / "adequada" de usar esse objeto. É?
por exemplo, usando o seguinte código
$('.trigger').click(function() {
window.trigger_link = this;
});
É aconselhável?
3 answers
Em JavaScript, qualquer variável global é na verdade uma propriedade do objeto window
. Utilizar um é equivalente a (e permutável com) utilizar o outro.
Usar variáveis globais é certamente "comum", por isso a questão é se é ou não "adequado"." Geralmente, as variáveis globais são desencorajadas , porque elas podem ser acessadas a partir de qualquer função e você corre o risco de ter várias funções tentando ler e escrever para as mesmas variáveis. (Isto é verdade com qualquer programação linguagem em qualquer ambiente, não apenas JavaScript.)
Resolva este problema criando um espaço de nomes único à sua aplicação . A abordagem mais fácil é criar um objecto global com um nome único, com as suas variáveis como propriedades desse objecto:
window.MyLib = {}; // global Object container; don't use var
MyLib.value = 1;
MyLib.increment = function() { MyLib.value++; }
MyLib.show = function() { alert(MyLib.value); }
MyLib.value=6;
MyLib.increment();
MyLib.show(); // alerts 7
Outra abordagem é usar .data()
anexar variáveis a um elemento DOM relevante. Isto não é prático em todos os casos, mas é uma boa maneira de obter variáveis que podem ser acessadas globalmente sem os deixar no espaço de nomes global.
O Que é, na verdade, não mencionados aqui, e é, provavelmente, o maior disjuntor do negócio em por que não usar window
como escopo global transportadora é que ele pode ser congelado (não escrita) em alguns casos (e eu estou falando de produção a base de experiência).
Um bom padrão na verdade é apenas criar uma variável global que será usada para todas as coisas comuns na sua aplicação
var Application = {};
Application.state = { name: 'Application' }
.
.
O que eu encontrei como o melhor padrão para mim em javascript é ter um global utilizar Redux .
Outro padrão para fazer um espaço de nomes único na sua aplicação.
function myApp()
{
var value = 5;
function addToValue(x)
{
value += x;
}
}()
Se quiser que as funções/valores sejam acessíveis depois, poderá armazená-las num objecto como este:
function myApp()
{
this.value = 5;
this.addToValue = function(x)
{
this.value += x;
}
}
var myInstance = new myApp();