, чтобы сохранить свой прогресс
1 дек. 2021 г., 17:22

Обсуждение задания "Understand Own Properties"

Зачем нажна проверка наличия свойства, перед добавлением его в масив? Что может пойти не так?
А, это проверка для того что бы вывести свойства именно конструктора, без свойств из прототипа?
А здесь при выполнении вообще не требуется проверка. Вижу, в других решениях такое применяется, но это излишнее, или, как любят говорить "масло масляное". Конструкция for ... in уже берет именно перечисляемые свойства объекта. Проверять их на собственность нет смысла. Оговорочка: на каждой итерации можно изменить исходный объект, так что в каких-то местах такое может понадобиться, но точно не в этом случае.

Поправочка: При удалении свойств объекта for in даже не будет это свойство перечислять. Пример:
const a = {name: "DSfsD", age: 16, legs: 2} for (const i in a) { console.log({...a}, i, a.hasOwnProperty(i) === true); delete a.age; } console.log('a', a); // {name: 'DSfsD', age: 16, legs: 2} 'name' true // {name: 'DSfsD', legs: 2} 'legs' true // a {name: 'DSfsD', legs: 2}
То есть, как мы видим, age даже не попало в перечисление.

>> именно конструктора, без свойств из прототипа?

Конструктор и прототип - это в общих чертах одно и то же, то есть базовая функция, с помощью которой быс создан конечный инстанс.
(a.__proto__.constructor === a.constructor) === true
Конечные сущности принято называть инстансами (instance). Если рассматривать теорию текущего урока, то Bird - это конструктор, а duck и canary - конечные инстансы.


Добавить комментарий