In einem article auf yuiblog sagt Douglas Crockford, dass die for in
-Anweisung über die Methoden eines Objekts iterieren wird. Warum erzeugt der folgende Code ["a", "b", "c", "d", "toString"] nicht? Sind nicht .toString() und andere Methoden Mitglieder von my_obj?Spricht JavaScript für In-Schleife über Methoden?
Object.prototype.toString = function(){return 'abc'}
Object.prototype.d = 4;
my_obj = {
'a':1,
'b':2,
'c':3
}
a = []
for (var key in my_obj) {
a.push(key)
}
console.log(a) // prints ["a", "b", "c", "d"]
Ja, 'Object.prototype.toString.propertyIsEnumerable() == false' – CMS
Aus dem Dokument verknüpft:„A für ... in Schleife nicht durchlaufen nicht integrierten Eigenschaften handelt. Dazu gehören alle integrierten Methoden von Objekten, wie die index_of-Methode von String oder die toString-Methode von Object. Die Schleife wird jedoch über alle benutzerdefinierten Eigenschaften (einschließlich aller, die die integrierten Eigenschaften überschreiben) iteriert. " Warum sagt das Dokument, dass "einschließlich alle, die integrierte Eigenschaften überschreiben", wenn in meinem Beispiel .toString() nicht überschrieben wird? – hekevintran
@hekevintran: Meine Antwort aktualisiert. –