Pull to refresh

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__?

И так глаза режет практически каждый абзац статьи.

Справедливости ради, для ES6+ классы это исключительно синтаксический сахар. С помощью new.target (доступен и в обычных функциях), 3го аргумента Reflect.construct, Object.setPrototypeOf и WeakMap реализуются все недоступные в ES5 части логики классов.

у каждой функции в JS есть свойство prototype, но только у функций! Класс в JS — это синтаксический сахар вокруг функции-конструктора, следовательно, у классов тоже есть свойство prototype.

У стрелочных функций нет prototype

Ох, да когда же вы закончите уже с своим синтаксическим сахаром.

  1. Классы - не синтаксический сахар над прототипами, Вот статья.

  2. for of работает с объектами итераторами, в какой он там обычный for разворачивается и под каким таким "капотом".

    Вы когда подобное пишите, приводите примеры из спецификации языка хотя бы, чтобы не быть голословным "механиком" с "капотом".

У вас логика немного извращенная, если позже добавили компоненты, которые позволяют написать то же самое, не используя классов, то это не делает классы синтаксическим сахаром.

Эти компоненты добавили не позже классов, а вместе с ними (а что-то, вроде возможности установки прототипа существующего объекта, было задолго до них - де факто, но не в стандарте). И это делает классы синтаксическим сахаром, смотрим хотя бы на определение из педивикии

Под «синтаксическим сахаром» понимается любой имеющийся в языке программирования синтаксический элемент, механизм, способ описания, который дублирует другой, имеющийся в языке элемент или механизм, но является более удобным в использовании, или более краток, или выглядит естественнее, или более привычен (похож на аналогичные элементы других языков), или просто лучше воспринимается при чтении программы человеком.

Обколются своими прототипами, а потом со своими полюшенами трахаются

Главное, это умение лаконично и достаточно ясно излагать мысли и передавать их читателю. Считаю, это у автора статьи отлично получается.

Sign up to leave a comment.