2012-04-17 10 views
5

habe ich diese Aufgabe und es ist Eigenschaften:Warum funktioniert meine for-Schleife nicht auf meinen Javascript-Eigenschaften?

var obj = {}; 

Object.defineProperty(obj, "value", { 
    value: true, 
    writable: false, 
    enumerable: true, 
    configurable: true 
}); 

var name = "John"; 

Object.defineProperty(obj, "name", { 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

Also dann Schleife ich einen Anruf auf sie:

for (var prop in obj) { 
    console.log(prop); 
} 

Was mein Tutorial nach, sollten die folgenden Ergebnisse liefern:

value 
name 

Aber stattdessen zeigt es nur Wert an. Warum wird der Name nicht angezeigt?

+0

Bitte akzeptieren Sie eine der Antworten, die Ihr Problem gelöst hat. Dies hilft anderen Benutzern in Zukunft, wenn sie mit diesem Problem konfrontiert sind .. :) –

Antwort

6

Der Standardwert für enumerable in defineProperty ist false; nicht aufzählbare Eigenschaften erscheinen nicht in for…in Schleifen. (Das ist der springende Punkt der enumerable Flagge.) Wenn Sie enumerable:true in Ihre zweite Definition auch hinzufügen, wird es es "reparieren".

Siehe some docs.

5

Da der Name Eigenschaft nicht als zählbare definiert ist, legen Sie den Namen Definition

Object.defineProperty(obj, "name", { 
    enumerable: true, 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

und es wird sich zeigen.

Verwandte Themen