Давайте сначала приведем пример:
// Отравление объекта.prototypeObject.prototype.bar = 1; var foo = {moo: 2}; for (var i in foo) {console.log (i); // печатает как бар, так и moo}Нам нужно обратить внимание на два балла здесь. Одним из них является то, что для петли для петли игнорируется набор атрибутов для перечисленного к FALSE. Например, свойство длины массива. Во -вторых, поскольку в In in будет пройти всю цепь прототипа, когда цепочка прототипа слишком длинная, она окажет влияние на производительность.
Перечисляемое - очень странное слово. На самом деле, вам трудно найти его тень в JavaScript, и на самом деле он заимствован у автора из Ruby. Цель создания перечисленного - не использовать его независимо, а использовать метод «смешанного». Многие методы в прототипе использования перечисляют, поэтому можно сказать, что это является краеугольным камнем прототипа. Я не дам подробного введения здесь, пожалуйста, обратитесь к деталям - перечисляемому.
Поскольку мы не можем изменить поведение самого цикла для самого цикла, мы можем принять только другие методы, чтобы отфильтровать свойства, которые не хотят появляться в цикле. Через «JavaScript Learning Notes объекты (III): HasownProperty» мы знаем, что метод HasownProperty может сделать это.
Фильтр с использованием HasownProperty
Все еще используя предыдущий пример:
// Отравление объекта.prototypeObject.prototype.bar = 1; var foo = {moo: 2}; for (var i in foo) {if (foo.hasownproperty (i)) {console.log (i); }}Это единственный правильный способ написать это. Поскольку мы использовали метод HasownProperty, на этот раз мы выключаем MOO. Если метод HasownProperty не применим, будет отображаться ошибка, когда объект. Прототип расширен.
Теперь многие фреймворки предпочитают расширить метод от Object.prototype, поэтому, когда мы используем эти рамки, мы столкнемся с проблемами, если мы используем для цикла, который не отфильтрован с помощью HasownProperty.
Суммировать
Рекомендуется разработать хорошую привычку к свойствам фильтрации HasownProperty, не делайте никаких предположений о бегущей среде, независимо от того, расширяется ли нативный объект прототипа.