В article на yuiblog Дуглас Крокфорд говорит, что инструкция for in
будет перебирать методы объекта. Почему следующий код не создает ["a", "b", "c", "d", "toString"]? Не являются ли команды .toString() и другие методы my_obj?Используется ли JavaScript для цикла с использованием методов?
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"]
Yep, 'Object.prototype.toString.propertyIsEnumerable() == false' – CMS
Из документа вы связаны:«А для ... в цикле не перебирать встроенные свойства Эти. включают в себя все встроенные методы объектов, такие как метод indexOf String или метод toString объекта. Однако цикл будет перебирать все пользовательские свойства (в том числе любые, которые перезаписывают встроенные свойства) ». Почему в документе говорится, что «включая любые, которые переписывают встроенные свойства», если в моем примере .toString() не перезаписано? – hekevintran
@hekevintran: Обновлен мой ответ. –