Prototipos
El mecanismo protipo(prototype) en JavaScript es un poco complicado. Vamos a darle un vistaso aqui. Usted querra gastar tiempo suficiente para revisar los capitulos 4-6 del titulo this & Object Prototypes para todos los detalles
Cuando usted referencia una propiedad en un objeto, si esa propiedad no existe, JavaScript automaticamente usara el prototipo de referencia interno de ese objeto para encontrar otro objeto para buscar dicha propiedad. Usted puede verlo como un fallback si la propiedad no es encontrada.
La referencia al prototipo interno enlazado de un objeto a su fallback sucede al momento que el objeto es creado. La manera mas simple de ilustrarlo es con una utilidad pre-construida llamada Object.create(..)
.
var foo = {
a: 42
};
// crea `bar` y enlaza a `foo`
var bar = Object.create( foo );
bar.b = "hello world";
bar.b; // "hello world"
bar.a; // 42 <-- delegado a `foo`
La propiedad a
actualmente no existe en el objeto bar
, pero ya que bar
es prototipado-enlazado al objeto foo
, JavaScript automaticamente baja a buscar a a
en el objeto foo
, donde es encontrada.
Este enlazado puede parecer una caracteristica extraña del lenguaje. La manera mas comun en que esta caracteristica es usado -- -- es tratando de emular/imitar un mecanismo de "clase" con "herencia".
Pero una manera mas natural de aplicar prototipos es un patron llamado "delegacion de comportamiento/behavior delegation", donde usted diseña intencionalmente sus objetos enlazados para poder delegar de uno al otro para partes de un comportamiento necesario