833 Stimmen

Statische Variablen in JavaScript

Wie kann ich statische Variablen in Javascript erstellen?

9voto

j D3V Punkte 3254

2021 UPDATE

Im Jahr 2021 können Sie einfach die static Stichwort

TC39 hat die STATIC Stichwort zu sein Stufe-4 Sprachmerkmal ab APRIL, 2021. Es hat lange gedauert, die static JS verfügt über eine offizielle Reihe von JS-Sprachfunktionen, die Wartezeit war aufgrund mangelnder Browser-Unterstützung, jedoch; Major-Browser unterstützen nun die statische Schlüsselwort, und seine offene Saison für öffentliche statische Felder & private statische Felder.


Im Folgenden finden Sie ein allgemeines Beispiel dafür, wie die neue Methode zur Implementierung statischer JavaScript-Klassenmitglieder aussieht
class ColorFinder {
  static #red = "#ff0000";
  static #green = "#00ff00";
  static #blue = "#0000ff";

  static colorName(name) {
    switch (name) {
      case "red": return ColorFinder.#red;
      case "blue": return ColorFinder.#blue;
      case "green": return ColorFinder.#green;
      default: throw new RangeError("unknown color");
    }
  }

  // Somehow use colorName
}
Das obige Beispiel stammt aus dem TC39 Repository, Static-Fields

Um mehr über die Implementierung dieser neuen JS-Sprachfunktion zu erfahren (HIER KLICKEN).
Um mehr über die Funktion selbst zu erfahren und Beispiele zu sehen, die die Syntax für statische Felder veranschaulichen (HIER KLICKEN).

9voto

COil Punkte 6490

Über die class die mit ECMAScript 2015 eingeführt wurde. Die anderen Antworten sind nicht ganz klar.

Das folgende Beispiel zeigt, wie man eine statische Variable erstellt staticVar mit dem ClassName . var synthax:

class MyClass {
    constructor(val) {
        this.instanceVar = val;
        MyClass.staticVar = 10;
    }
}

var class1 = new MyClass(1);
console.log(class1.instanceVar);      // 1
console.log(class1.constructor.staticVar); // 10

// New instance of MyClass with another value
var class2 = new MyClass(3);
console.log(class1.instanceVar);      // 1
console.log(class2.instanceVar);      // 3

Um auf die statische Variable zuzugreifen, verwenden wir die .constructor Eigenschaft, die einen Verweis auf die Objektkonstruktorfunktion zurückgibt, mit der die Klasse erstellt wurde. Wir können sie für die beiden erstellten Instanzen aufrufen:

MyClass.staticVar = 11;
console.log(class1.constructor.staticVar); // 11
console.log(class2.constructor.staticVar); // 11 <-- yes it's static! :)

MyClass.staticVar = 12;
console.log(class1.constructor.staticVar); // 12
console.log(class2.constructor.staticVar); // 12

8voto

Hemant Punkte 4427

Wenn Sie statische Variablen für die Erstellung von Konstanten in Ihrer Anwendung deklarieren möchten, halte ich den folgenden Ansatz für den einfachsten

ColorConstants = (function()
{
    var obj = {};
    obj.RED = 'red';
    obj.GREEN = 'green';
    obj.BLUE = 'blue';
    obj.ALL = [obj.RED, obj.GREEN, obj.BLUE];
    return obj;
})();

//Example usage.
var redColor = ColorConstants.RED;

7voto

funroll Punkte 33821

Es gibt noch andere ähnliche Antworten, aber keine davon hat mich wirklich angesprochen. Hier ist das, was ich am Ende herausgefunden habe:

var nextCounter = (function () {
  var counter = 0;
  return function() {
    var temp = counter;
    counter += 1;
    return temp;
  };
})();

7voto

Andrew Hare Punkte 332190

Das, was in JavaScript einer statischen Variable am nächsten kommt, ist eine globale Variable - das ist einfach eine Variable, die außerhalb des Bereichs einer Funktion oder eines Objektliterales deklariert wird:

var thisIsGlobal = 1;

function foo() {
    var thisIsNot = 2;
}

Eine andere Möglichkeit wäre, globale Variablen in einem Objektliteral zu speichern, etwa so:

var foo = { bar : 1 }

Und dann greifen Sie auf die Variabeln wie folgt zu: foo.bar .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X