En un article en yuiblog Douglas Crockford dice que la instrucción for in
iterará sobre los métodos de un objeto. ¿Por qué el siguiente código no produce ["a", "b", "c", "d", "toString"]? ¿No son .toString() y otros métodos miembros de my_obj?¿JavaScript para en iterar itera sobre los métodos?
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
Del documento se conectó: "Un bucle for ... in no iterar sobre propiedades integradas Estos. incluir todos los métodos incorporados de objetos, como el método indexOf de String o el método ObjectS toString. Sin embargo, el ciclo iterará sobre todas las propiedades definidas por el usuario (incluidas las que sobrescriban las propiedades integradas) ". ¿Por qué el documento dice que "se incluye cualquiera que sobrescriba las propiedades incorporadas" si en mi ejemplo .toString() no se sobrescribe? – hekevintran
@hekevintran: actualicé mi respuesta. –