– functional inheritance -> prototypal inheritance –> pseudo classical inheritance –> hacked classical inheritance
– Functional can be achieved by any language who supports closure scope and dynamic object augmentation.
– The bad parts are duplicated properties and methods / impossible to achieve dynamic class modification.
– The good parts are: real private variables / callable instances.
Pseudo classical inheritance
– For pseudo classical, semi private variable is achieved by name convention, i.e. _variable_name.
– Comparison among pseudo classical, prototypal and functional
|start out simple||no||sort of||yes|
|Method sharing||Method sharing||Method sharing with a performance penalty or capability security|
|Dynamic class modification||Dynamic class modification||Avoid using ‘this’|
|instanceOf works at all level||instanceOf works at all level||callable instance / instanceOf doesn’t work at all level / no prototypal masking|
|Optimized by the engine||Avoid using ‘new’ and ‘.prototype’||Avoid using ‘new’ and ‘.prototype’|