Как стать автором
Обновить

Комментарии 2

Очень плохой перевод сомнительной статьи.


Инкапсуляция с фабричными функциями проще и понятнее. Они опираются на сферы применения, которые составляют большую часть языка JavaScript.

Инкапсуляция с классами, с другой стороны, требует добавления # к приватной переменной. Это может сделать вещи неуклюжими.

Уровень аргументации "лень писать на символ больше"?


Проще говоря, Классы требуют this, а Фабричные функции — нет. Я предпочитаю фабричные функции здесь, потому что:

• Контекст this может измениться (что может сбить с толку).

Меня сбивает с толку это предложение. Если это про то, что this биндится в момент вызова, то это проблема того же уровня, что и "вызвал фабричную функцию с new". И я не уверен, с чем из этого проблемы будут возникать чаще, учитывая выбранный автором стиль их именования (Foo() вместо createFoo() или makeFoo()).


• Код, написанный с помощью фабричных функций, короче и чище (так как мы можем использовать инкапсулированные переменные без написания this.#variable).

Выигывать пару символов, теряя взамен возможность взглядом отличить поля от локальных переменных?

А еще продвигаемые автором "фабричные функции" намного хуже обращаются с памятью. Классы (и конструкторы с прототипами) хранят свои методы в объекте-прототипе, который один на всех; "фабричные функции" же будут хранить их в каждом из созданных ими объектов.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий