Показать сообщение отдельно
  #8 (permalink)  
Старый 06.08.2022, 13:32
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Andy_kun, нет, for in, если условно, равносильно рекурсивному вызову Object.keys вверх по цепочке наследования (Obect.keys(el) + Object.keys(Object.getProtiotypeOf(el)) + ...). Object.getOwnPropertyNames получает также как и keys только свойства самого объекта, но в отличение от keys он получает все свойства, а не только перечислимые(enumerable).

{
const parent = {
  parentProp: 'bar'
};
const child = Object.create(parent, {
  nonEnumerableChildProp: {
    enumerable: false,
    value: 'buz'
  }
});
child.childProp = 'foo';

function *keys (obj) {
  for (const key in obj)
    yield key;
} 
  
console.log('child.parentProp', child.parentProp);
console.log('child.childProp', child.childProp);
console.log('child.nonEnumerableChildProp', child.nonEnumerableChildProp);

console.log('object.keys', Object.keys(child));
console.log('object.getOwnPropertyNames', Object.getOwnPropertyNames(child));
console.log('for in', [...keys(child)]);
}
__________________
29375, 35

Последний раз редактировалось Aetae, 06.08.2022 в 13:45.
Ответить с цитированием