Комментарии 8
cart.addProduct = () => 'nope!'
// В строке выше нет ошибки!
Если человек сам переопределил метод класса и потом удивляется, что метод работает не так как надо, ну такое себе.
Потеря this — можно юзать стрелочные функции, не?
Сначала странные люди из Java приходят в js и говорят:"нам нужны классы". Потом другие странные люди пишут, что this и new ведут себя странным не логичным образом. А на самом деле они не поняли прототипного наследования, что с синтаксисом классов совсем не удивительно.
Эти люди знают, что наследование нужно для полиморфизма а не для исключения копипасты.
Полиморфизм в языке с утиной типизацией штука не сильно нужная, как и само понятие Class, потому что Class — это пользовательский тип (для странных людей из Java).
Кто-то, когда-то нас всех обманул, объявив Javascript объектно-ориентированным (такая тогда была мода), хотя по сути он является мощным, динамическим и красивым процедурным языком. В этом его сила!
// ShoppingCart.js
export default class ShoppingCart {
constructor({db}) {
this.db = db
}
@autobind
empty () {
this.db = []
}
@freeze
get products () {
return this.db;
}
}
Если вы работаете на позиции разработчика, то это подрозумевает, что Вы понимаете как работает Ваш язык. Например в С зачастую приходится вручную контролировать выделение памяти и ее освобождение. Если Вы выделяете память не особождая после ее использования, и удивляетесь memoryleak, значит Вы не компетентны в разработке на С.
Если Вы переопределяете метод экземпляра JS объекта и не понимаете, почему оно не работает значит Вы не компетентны в разработке на JS.
Обобщая: если Вы не понимаете как работает язык на котором Вы пишете, то Вы не компетентны в разработке на этом языке и здесь только один паттерн RTFM.
Элегантные паттерны современного JavaScript: Ice Factory