Во время сегодняшнего обзора кода мой коллега сказал что-то интересное:
prototype
полезно только тогда, когда вам нужно наследование - и когда наследование когда-либо является хорошей идеей ?
Я подумал об этом и понял, что обычно использую наследование, чтобы обойти код, который изначально был плохо спроектирован. Современный ОО-стиль предпочитает композицию, а не наследование, но я не знаю ни одного языка, который принимал бы это близко к сердцу и фактически применял его.
Существуют ли универсальные языки программирования с классами, объектами, методами, интерфейсами и т. Д., Которые запрещают наследование на основе классов? (Если такая идея не имеет смысла, почему бы и нет?)
implements
ключевого слова и интерфейсов (в отличие от наследования состояний и поведение, введенное с использованием extends
ключевого слова в классах, содержащих любую реализацию).
new
, this
И prototype
все слишком много минного поля для общего пользования ИМО.
prototype
также полезно, когда у вас есть открытые методы и свойства, которые должны быть общими для всех экземпляров. Это также полезно , потому что позволяет правильно использоватьinstanceof
оператор в JavaScript:if (foo instanceof Foo) { ...
.