833 Stimmen

Statische Variablen in JavaScript

Wie kann ich statische Variablen in Javascript erstellen?

31voto

Max Heiber Punkte 12338

Aktualisierte Antwort:

En ECMAScript 6 können Sie statische Funktionen mit dem Befehl static Stichwort:

class Foo {

  static bar() {return 'I am static.'}

}

//`bar` is a property of the class
Foo.bar() // returns 'I am static.'

//`bar` is not a property of instances of the class
var foo = new Foo()
foo.bar() //-> throws TypeError

ES6-Klassen führen keine neue Semantik für Statik ein. Sie können das Gleiche in ES5 wie folgt tun:

//constructor
var Foo = function() {}

Foo.bar = function() {
    return 'I am static.'
}

Foo.bar() // returns 'I am static.'

var foo = new Foo()
foo.bar() // throws TypeError

Sie können einer Eigenschaft von Foo denn in JavaScript sind Funktionen Objekte.

28voto

jim_zike_huang Punkte 291
function Person(){
  if(Person.count == undefined){
    Person.count = 1;
  }
  else{
    Person.count ++;
  }
  console.log(Person.count);
}

var p1 = new Person();
var p2 = new Person();
var p3 = new Person();

16voto

Nate Punkte 774

Das folgende Beispiel und die Erklärung stammen aus dem Buch Professional JavaScript for Web Developers 2nd Edition von Nicholas Zakas. Dies ist die Antwort, nach der ich gesucht habe, und ich dachte, es wäre hilfreich, sie hier hinzuzufügen.

(function () {
    var name = '';
    Person = function (value) {
        name = value;
    };
    Person.prototype.getName = function () {
        return name;
    };
    Person.prototype.setName = function (value) {
        name = value;
    };
}());
var person1 = new Person('Nate');
console.log(person1.getName()); // Nate
person1.setName('James');
console.log(person1.getName()); // James
person1.name = 'Mark';
console.log(person1.name); // Mark
console.log(person1.getName()); // James
var person2 = new Person('Danielle');
console.log(person1.getName()); // Danielle
console.log(person2.getName()); // Danielle

El Person Konstruktor in diesem Beispiel hat Zugriff auf die private Variable name, ebenso wie die getName() y setName() Methoden. Mit diesem Muster wird die Namensvariable statisch und wird für alle Instanzen verwendet. Dies bedeutet, dass der Aufruf von setName() auf einer Instanz wirkt sich auf alle anderen Instanzen aus. Aufruf von setName() oder die Erstellung eines neuen Person Instanz setzt die Variable name auf einen neuen Wert. Dies führt dazu, dass alle Instanzen denselben Wert zurückgeben.

15voto

Automatico Punkte 11394

Wenn Sie das neue Klassensyntax dann können Sie jetzt Folgendes tun:

    class MyClass {
      static get myStaticVariable() {
        return "some static variable";
      }
    }

    console.log(MyClass.myStaticVariable);

    aMyClass = new MyClass();
    console.log(aMyClass.myStaticVariable, "is undefined");

Dadurch wird eine statische Variable in JavaScript erstellt.

12voto

GetFree Punkte 36514

Es gibt 4 Möglichkeiten, funktionslokale statische Variablen in Javascript zu emulieren.

Methode 1: Verwendung von Funktionsobjekteigenschaften (unterstützt in alten Browsern)

function someFunc1(){
    if( !('staticVar' in someFunc1) )
        someFunc1.staticVar = 0 ;
    alert(++someFunc1.staticVar) ;
}

someFunc1() ; //prints 1
someFunc1() ; //prints 2
someFunc1() ; //prints 3

Methode 2: Verwendung eines Verschlusses, Variante 1 (unterstützt in alten Browsern)

var someFunc2 = (function(){
    var staticVar = 0 ;
    return function(){
        alert(++staticVar) ;
    }
})()

someFunc2() ; //prints 1
someFunc2() ; //prints 2
someFunc2() ; //prints 3

Methode 3: Verwendung eines Verschlusses, Variante 2 (auch in alten Browsern unterstützt)

var someFunc3 ;
with({staticVar:0})
    var someFunc3 = function(){
        alert(++staticVar) ;
    }

someFunc3() ; //prints 1
someFunc3() ; //prints 2
someFunc3() ; //prints 3

Methode 4: Verwendung eines Verschlusses, Variante 3 (erfordert Unterstützung für EcmaScript 2015)

{
    let staticVar = 0 ;
    function someFunc4(){
        alert(++staticVar) ;
    }
}

someFunc4() ; //prints 1
someFunc4() ; //prints 2
someFunc4() ; //prints 3

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