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