wake-up-neo.com

Das Speichern einer Variablen im JavaScript-Fenster 'Fenster' ist eine geeignete Methode, um dieses Objekt zu verwenden.

(Vielleicht) Ich habe gerade ein Problem gelöst ( Wie aktualisiere ich Frontend-Inhalte, nachdem ein Formular erfolgreich aus einem Dialogfenster gesendet wurde? ), indem Sie eine Variable im JavaScript-Objekt window "speichern" bzw. "speichern". Da ich jedoch Neulinge in Sachen JavaScript bin, ist Ich habe einige Zweifel, ob das Speichern/Speichern einer Variablen im JavaScript-Objekt window eine "gebräuchliche"/"richtige" Methode zur Verwendung dieses Objekts istIst es?

Verwenden Sie beispielsweise den folgenden Code

$('.trigger').click(function() {
  window.trigger_link = this;
});

ist ratsam

29
Backo

In JavaScript ist jede globale Variable eine Eigenschaft des window-Objekts. Die Verwendung der einen ist gleichbedeutend mit der Verwendung der anderen. 

Die Verwendung globaler Variablen ist sicherlich "üblich", daher stellt sich die Frage, ob es "richtig" ist oder nicht. Im Allgemeinen wird von globalen Variablen abgeraten , da auf sie mit jeder Funktion zugegriffen werden kann und Sie das Risiko haben, dass mehrere Funktionen versuchen, aus denselben Variablen zu lesen und in diese zu schreiben. (Dies gilt für jede Programmiersprache in jeder Umgebung, nicht nur für JavaScript.) 


Lösen Sie dieses Problem, indem Sie einen für Ihre Anwendung eindeutigen Namespace erstellen. Am einfachsten ist es, ein globales Objekt mit einem eindeutigen Namen zu erstellen, wobei Ihre Variablen als Eigenschaften dieses Objekts gelten:

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

Ein anderer Ansatz ist die Verwendung von .data() , um Variablen an ein relevantes DOM-Element anzuhängen. Dies ist nicht in allen Fällen praktisch, aber es ist eine gute Möglichkeit, Variablen zu erhalten, die Zugriff global sind, ohne sie im globalen Namespace zu belassen.

65
Blazemonger

Ein weiteres Muster, um einen eindeutigen Namespace in Ihrer Anwendung zu erstellen.

function myApp()
{
    var value = 5;
    function addToValue(x)
    {
         value += x;
    }
}()

Wenn Sie möchten, dass Funktionen/Werte später verfügbar sind, können Sie sie in einem Objekt wie dem folgenden speichern:

function myApp()
{
    this.value = 5;
    this.addToValue = function(x)
    {
         this.value += x;
    }
}
var myInstance = new myApp();
1
Samy Bencherif

Was hier eigentlich nicht erwähnt wird und wahrscheinlich der größte Deal Breaker auf ist, warumwindownicht als globaler Scope-Carrier verwendet wird, ist, dass in einigen Fällen eingefroren (nicht beschreibbar) sein kann ( und ich spreche aus produktionsbasierter Erfahrung).

Ein gutes Muster ist eigentlich nur eine globale Variable, die für alle in Ihrer Anwendung üblichen Elemente verwendet wird

var Application = {};
Application.state = { name: 'Application' }
.
.

Was ich als das beste Muster für mich in Javascript gefunden habe, ist ein globaler Status mit Redux .

1
J.D.