Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Что такое перечисляемые и неперечисляемые свойства объектов?

#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

Комментариев нет:

Отправить комментарий