4 ms·
If classes were just that then they'd not be so bad. They also tend to bring inheritance along with them, though, and that's a messy beast.
by tel 7y ago
If classes were just that then they'd not be so bad. They also tend to bring inheritance along with them, though, and that's a messy beast.
- chrisweekly 7y agoIt's classical inheritance in particular that's fragile and rigid and problematic.
- tel 7y agoPrototypical inheritance (which, I assume, is the other side of what you're referring to) is also weird. Prototypes eliminate classes as a special thing (relegating them to mere constructors or factories, which is fair) but they don't help with typing (compiler-enforced or logical). If A has B in its prototype chain, are all values of A able to be transparently treated as values of B? Plausibly, this works, but there's nothing that really enforces it. Prototype inheritance is just a way of not needing to repeat code. I agree it's a bit better than class inheritance, but most of the time all you need and want is composition.
- chrisweekly 7y agoWe're agreed that prototypal inheritance (at least in Javascript) is orthogonal to typing. Your question about the values of A and B seems to imply a parent:child relationship -- which is the kind of hierarchy that we're looking to avoid, right? It's straightfwd to flatten the prototype chain using a single delegate prototype. Yes, favor composition over inheritance. FWIW, I really like Eric Elliott's take on this stuff: https://medium.com/javascript-scene/common-misconceptions-about-inheritance-in-javascript-d5d9bab29b0a https://medium.com/javascript-scene/common-misconceptions-ab...