#javascript
В книге Дэвида Флэнагана в главе "Свойства и методы универсального класса Object" столкнулся с термином перечисляемые и не перечисляемые свойства. Раз есть перечисляемые свойства значит есть и не перечисляемые свойства. Хотелось бы узнать что это за свойства и чем отличаются. В интернете не нашел по этой теме ничего подходящего. Поэтому прошу помощи здесь. Всем заранее спасибо. Выдержка из книги: Обратите внимание: все свойства объекта, определяемые пользователем, являются перечислимыми. Неперечислимыми обычно являются унаследованные свойства (тема наследования свойств рассматривается в главе 9), поэтому практически всегда этот метод возвращает то же значение, что и метод hasOwnProperty().
Ответы
Ответ 1
В цитате речь идет о свойствах объекта. Они могут быть перечислимыми, и не перечислимыми. Если свойство перечислимое, то при обходе в цикле for..in его можно будет получить, если не перечислимое - нельзя. Например: var o = { e: "prop" }; for (var i in o) { document.write('свойство "' + i + '" перечислимое'); } document.write('
свойство toString не перечислимое: '+o.toString)Ответ 2
Логично предположить, что речь идёт о массивах и объектах с подобной семантикой. Т. е. нечто, содержащие свойства-индексы и (скрытое) свойство length. Если говорить о ES6, то сюда можно отнести генераторы, а также вспомнить Symbol.iterator и цикле for of, позволяющем итерироваться по коллекции. PS: Книгу не читал.Ответ 3
Вот ТУТ изложил всю инфу которую нашёл по собственным и перечисляемым свойствам объекта. Так же рассказал как сделать свое СОБСТВЕННОЕ свойство! let object = { enumProp1: '1', enumProp2: '2', enumProp3: '3', }; // Явное определение НЕПЕРЕЧИСЛЯЕМОГО (собственного) свойства Object.defineProperty(object, 'key', { enumerable: false, // - флаг который какраз делает его НЕ перечисляемым!!! если изменить на true, то будет перечисляемым!!! }); for (key in object) { document.write(`${key}
`); // все перечисляемые свойства можно перечислить For } //Так же не перечисляемыми свойствами являются те, которые унаследованы от дургих или просто ядвляются внутренними и закрытыми document.write('
свойство toString не перечисляемое (собственное): '+ object.toString); // БОЛЬШЕ ИНФЫ ТУТ https://developer.mozilla.org/ru/docs/Web/JavaScript/Enumerability_and_ownership_of_properties
Комментариев нет:
Отправить комментарий