In un article su yuiblog, Douglas Crockford afferma che l'istruzione for in
verrà iterata sui metodi di un oggetto. Perché il seguente codice non produce ["a", "b", "c", "d", "toString"]? Non sono .toString() e altri metodi membri di my_obj?JavaScript va per ciclo iterato sui metodi?
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"]
Sì, 'Object.prototype.toString.propertyIsEnumerable() == false' – CMS
Dal documento si è collegato: "Un ciclo for ... in non iterare su proprietà predefinite questi. include tutti i metodi built-in di oggetti, come il metodo indexOf di String o il metodo toString di Object. Tuttavia, il ciclo eseguirà l'iterazione su tutte le proprietà definite dall'utente (incluse quelle che sovrascrivono le proprietà integrate). " Perché il documento dice che "compresi quelli che sovrascrivono le proprietà built-in" se nel mio esempio .toString() non viene sovrascritto? – hekevintran
@hekevintran: aggiornata la mia risposta. –