Ho letto recentemente questo post sul blog: I due pilastri di JavaScript Parte 1: Come sfuggire al settimo cerchio dell'inferno , che è essenzialmente una critica alla programmazione orientata agli oggetti e alla difesa della programmazione funebre.
Alcuni punti chiave fatti:
Constructors violate the open/closed principle because they couple all callers to the details of how your object gets instantiated. ... JavaScript doesn’t need constructor functions because any function can return a new object. With dynamic object extension, object literals and
Object.create()
, we have everything we need — with none of the mess. Andthis
behaves just like it does in any other function. Hurray!Classical Inheritance generally lets you inherit only from a single ancestor, forcing you into awkward taxonomies. I say awkward because without fail, every OO design taxonomy I have ever seen in a large application was eventually wrong.
The coupling between a child class and its parent is the tightest form of coupling in OO design. That’s the opposite of reusable, modular code.
Making small changes to a class creates rippling side-effects that break things that should be completely unrelated.
Ok, certo. Senza discutere i meriti di questi argomenti (penso che l'articolo potrebbe fare con alcuni esempi di codice) - come viene utilizzato in pratica questo paradigma di hacking funzionale / prototipo?
es. In particolare per quanto riguarda un framework come Angular o React, in cui le basi dei componenti sono classi ES6 che estendono una classe parent di framework.