2017-01-07 9 views
0

Ich möchte verfolgen, wie viele Objekte mit meiner Konstruktorfunktion erstellt wurden. Zur Zeit bekomme ich die Nummer, indem ich eine humanCount Variable im globalen Namensraum platziere. Aber es sieht nicht gut für mich aus. Mein Code ist:Wie erreiche ich die Klassenvariablen-Funktionalität in JavaScript?

var humanCount = 0; 

function Human(name, age){ 
    this.name = name; 
    this.age = age; 
    humanCount++; 
}; 

var john = new Human("JOHN", 35); 
console.log(humanCount); // prints 1 

var jane = new Human("JANE", 28); 
console.log(humanCount); // prints 2 

Jeder andere Weg, um die Funktionalität zu erreichen?

+0

Darf ich fragen, warum Sie diese Statistik wissen möchten? –

+0

Sie müssen den globalen Bereich nicht verwenden, wenn Sie nicht möchten. Sie können so viele "Zwischenbereiche" erstellen, wie Sie möchten. Sie können diesen Wert auch zu einer Eigenschaft von "Human" machen. Es gibt viele Möglichkeiten. –

+0

Es geht nicht um Public/Private oder Scoping-Problem. Es geht darum, eine Variable zu erstellen, die verfolgt, wie viele Instanzen erstellt werden. @felixKling –

Antwort

2

Sie könnten der Zähler eine Eigenschaft der „Klasse“ machen (der Konstruktor):

function Human(name, age){ 
    this.name = name; 
    this.age = age; 
    Human.count++; 
}; 

Human.count = 0; 

Oder man könnte es eine Eigenschaft des Prototyps machen:

function Human(name, age){ 
    this.name = name; 
    this.age = age; 
    Human.prototype.count++; 
}; 

Human.prototype.count = 0; 
1

erstellen humanCount Eigenschaft wie :

function Human(name, age){ 
    this.name = name; 
    this.age = age; 
    Human.humanCount = (Human.humanCount || 0) + 1; 
}; 
+1

* "Erstellen Sie eine Variable innerhalb der Klasse:" * 'humanCount' ist eine Eigenschaft der' Human'-Funktion, keine Variable. –

+0

@FelixKling Richtig –

Verwandte Themen