Object: prototype
El objeto prototype es el utilizado en Javascript para almacenar los métodos y propiedades heredables. Los métodos y propiedades almacenados en la propiedad prototype de un objeto son heredados por sus instancias y objetos derivados.
Mediante el método setPrototypeOf() se puede cambiar el prototype de un objeto cualquiera. Este método se complementa con getPrototypeOf(), que devuelve la proiedad prototype de un objeto.
El método setPrototypeOf(obj, proto) usa dos argumentos,
- el objeto destino al que se va a asignar el nuevo prototype
- el objeto prototype que se asigna (puede ser null)
Hay que tener cuidado porque el objeto prototype que se asigna al objeto sobreescribe al antiguo que ya poseyera el objeto.
El otro método getPrototypeOf(arg) solo necesita un argumento, el objeto del que se lee el varor de la propiedad prototype
var flores = {
nombre:'',
color:'',
cartel: function(){return "Flor: "+this.nombre+" "+this.color}
}
var plantas = {
proveedor:'',
comprar : function(){return "Comprar en: "+this.proveedor }
}
rosa = Object.create(flores);
rosa.nombre = "Rosa"
rosa.color = "Rojo";
Object.setPrototypeOf(flores, plantas);
flores.proveedor ="Flores Garcia";
console.log(rosa.comprar());
console.log(Object.getPrototyeOf(flores) )
En este ejemplo creamos un objeto flores, este objeto lo usamos como prototype para crear el objeto rosa. Ahora este objeto puede acceder al método cartel y a las propiedades nombre y color
Sobrescribimos la propiedad nombre y color del objeto recién creado.
Se crea un objeto planta con las propiedades proveedor y el método comprar. Cambiamos el prototype de flores a plantas. Antes su prototype era Object.
Ahora rosa puede usar al método comprar, pues se creó a partir de flores que tiene ese método en su prototype.
En la última linea ves como el resultado de leer el objeto prototype de flores es precisamente plantas