Під час огляду коду сьогодні мій колега сказав щось цікаве:
prototype
корисна лише тоді, коли вам потрібна спадщина - а коли спадщина колись гарна ідея ?
Я подумав над цим і зрозумів, що зазвичай використовую спадщину, щоб обійти код, який був погано розроблений в першу чергу. Сучасний стиль OO віддає перевагу композиції над спадщиною, але я не знаю жодної мови, яка б сприйняла це до душі і насправді його застосувала .
Чи існують мови програмування загального призначення з класами, об'єктами, методами, інтерфейсами тощо, які забороняють успадкування на основі класів? (Якщо така ідея не має сенсу, чому б і ні?)
implements
ключового слова та інтерфейсів (на відміну від успадкування стану і поведінка, введена із використанням extends
ключового слова в класах, що містять будь-яку реалізацію).
new
, this
і prototype
все це занадто багато мінного поля для загального використання ІМО.
prototype
Також корисно , якщо у вас є відкриті методи і властивості , які повинні бути розділені між екземплярами. Це також корисно , тому що дозволяє правильно використовуватиinstanceof
оператор в JavaScript:if (foo instanceof Foo) { ...
.