Esta es una alternativa que tenemos para emular herencia en JavaScript. Lo que hacemos acá es simplemente compartir los métodos y propiedades de un objeto en otro.
Es una manera simple de compartir código, pero realmente lo que está pasando es que cada instancia del constructor Rectangle tiene su propia copia del método getArea, jamás se heredan por medio de la cadena de prototype.
Además todos los objetos son instancias de Object, no de los constructores como tal.
Herencia prototypal
Es la manera estándar que ofrece JavaScript para herencia de propiedades y métodos. Debido a esto se dice que JavaScript es un lenguaje orientado a Prototipos.
La gran diferencia acá es que el método getArea quedó definido en el prototype del constructor base Shape y este se va heredando actualizando el prototype de Rectangle y de Square. Además todos los objetos son instancias de sus respectivos constructores:
También es posible sobreescribir un método de una manera diferente agregandolo como una propiedad “propia” del objeto en el constructor: