Comments 10
Вы ошибаетесь чуть менее, чем во всем. Давайте рассмотрим только "итого":
__proto__
— это свойство любого объекта в JS, которое является ссылкой на свойство prototype функции-конструктора
Нет, это не свойство любого объекта в JS. Это legacy (сейчас в стандарте он опциональный - рекомендуется использовать Object.setPrototypeOf
/ Object.getPrototypeOf
- про которые в посте и слова не сказано) accessor, расположенный на Object.prototype
. Для объектов, не унаследованный от Object.prototype
(например, Object.create(null)
) его не будет. Оно может быть перекрыто собственным свойством объекта. Есть ещё __proto__
в литерале объекта, но это немного другое.
у каждой функции в JS есть свойство prototype, но только у функций!
Далеко не у каждой функции в JS есть свойство .prototype
- оно есть только у конструкторов. Его нет у стрелочных функций, функций заданных синтаксисом методов ({ method() { /* ... */ } }
), асинхронных функций, built-in функций и других.
Потомок связан с родителем свойством
__proto__
, которое указывает на свойствоprototype
родителя
Про __proto__
смотрите первый пункт. А про prototype
- конструкторы не единственный способ наследования - на чей prototype
будет указывать Object.create({}).__proto__
?
И так глаза режет практически каждый абзац статьи.
Считаю важно отменить, что Class
в JS это не просто «синтаксический сахар». Не всё что мы можем сделать с Class
-ами, мы можем повторить на прототипах.
На хабре уже была статья, JavaScript-классы — это не просто «синтаксический сахар»
у каждой функции в JS есть свойство prototype, но только у функций! Класс в JS — это синтаксический сахар вокруг функции-конструктора, следовательно, у классов тоже есть свойство prototype.
У стрелочных функций нет prototype
Ох, да когда же вы закончите уже с своим синтаксическим сахаром.
Классы - не синтаксический сахар над прототипами, Вот статья.
for of работает с объектами итераторами, в какой он там обычный for разворачивается и под каким таким "капотом".
Вы когда подобное пишите, приводите примеры из спецификации языка хотя бы, чтобы не быть голословным "механиком" с "капотом".
Ну по поводу классов смотрите чуть выше.
У вас логика немного извращенная, если позже добавили компоненты, которые позволяют написать то же самое, не используя классов, то это не делает классы синтаксическим сахаром.
Эти компоненты добавили не позже классов, а вместе с ними (а что-то, вроде возможности установки прототипа существующего объекта, было задолго до них - де факто, но не в стандарте). И это делает классы синтаксическим сахаром, смотрим хотя бы на определение из педивикии
Под «синтаксическим сахаром» понимается любой имеющийся в языке программирования синтаксический элемент, механизм, способ описания, который дублирует другой, имеющийся в языке элемент или механизм, но является более удобным в использовании, или более краток, или выглядит естественнее, или более привычен (похож на аналогичные элементы других языков), или просто лучше воспринимается при чтении программы человеком.
Обколются своими прототипами, а потом со своими полюшенами трахаются
Главное, это умение лаконично и достаточно ясно излагать мысли и передавать их читателю. Считаю, это у автора статьи отлично получается.
__proto__ и prototype