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?

Author: Community, 2012-09-12

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.

 94
Author: Blazemonger, 2017-07-20 16:05:34

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 .

 8
Author: J.D., 2018-08-18 13:05:12

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();
 1
Author: Samy Bencherif, 2017-07-16 05:38:03