Primer método: (Object masquerading)
function ClaseA(nombre){
this.nombre=nombre;
this.identificarse=function(){
alert(this.nombre);
}
}
function ClaseB(nombre){
this.superClase=ClaseA;
this.superClase(nombre);
delete this.superClase;
}
El constructor ‘ClaseA’, es llamado como método del nuevo objeto que se esta creando en ‘ClaseB’, por lo tanto, todas las propiedades y métodos que se crean en ClaseA se van a agregar al nuevo objeto de ClaseB.
frente a otros métodos éste permite herencia múltiple, es decir, un objeto puede heredar de mas de una clase al mismo tiempo sólo con llamar a cuantos constructores sean necesarios dentro del constructor de la clase hija.
Segundo método: (Prototype chaining)
El ejemplo anterior utilizando prototype chaining quedaría de la siguiente manera:
function ClassA(){}
ClassA.prototype.nombre = “”;
ClassA.prototype.identificarse = function(){
alert(this.nombre);
}
function ClassB(){}
ClassB.prototype = new ClassA();
De ahora en adelante, todos los objetos creados con ‘ClassB’ van a tener, también, los mismos métodos y propiedades de la instancia de ‘ClassA’. Y si queremos agregar más métodos y propiedades, lo único que tenemos que hacer es agregárselos al prototype de ‘ClassB’.
Lo malo de este método para emular herencia, es que no se puede pasar parámetros a la clase base, como hicimos en el ejemplo de Object masquerading.
Lo bueno, es que el operador instanceof funciona de una manera única: por cada instancia de ClaseB, instanceof nos retorna true tanto con ‘ClaseA’ como con ‘ClaseB’:
var miobjeto = new ClassB(); alert(miobjeto instanceof ClassB); // true
alert(miobjeto instanceof ClassA); // true
Referencias
Blog de Notas: Herencia en Javascript
No hay comentarios:
Publicar un comentario