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