Totalmente de acuerdo con todo lo que has dicho. Solo decir que use la
palabra sobreescribir porque no se como se llama exactamente eso en
castellano. En Ingles el termino es override (algo asi como anular). Pero
esta claro que el metodo sigue en el prototype de la superclase. Pero si lo
encuentra en su prototype no seguira buscando en el prototype de clases
superiores, para eso precisamente esta super.
un saludo
Joseba Alonso
www.sidedev.net
----- Original Message -----
From: "nosleep" <[EMAIL PROTECTED]>
To: "flashmaestro List Member" <[EMAIL PROTECTED]>
Sent: Friday, September 20, 2002 10:45 PM
Subject: [flashmaestro] [MX] OOP: herencia
> Ajam...
> Si, tienes raz�n sobre lo de llamar desde un m�todo cualquiera de una
> subclase con "super" no tiene mucho sentido ya que se puede llegar a el
> a trav�s de "this" (no se en que estaba pensando), pero hay ciertas
> cosas que no entiendo de tu esplicaci�n.
> El caso es que cuando tenemos un m�todo "ladra" definido en una
> superclase y otro m�todo "ladra" definido en una de sus subclases, no
> podemos usar la palabra "this" para implementar el m�todo "ladra" de
> superclase porque estar�amos llamando al mismo m�todo donde estamos con
> recursividad. Para eso usamos super, para decir que flash mira en el
> m�todo
> de la clase superior. Hasta aqu� de guti.
> Pero no estamos sobrescribiendo en ning�n momento el m�todo "ladra" de
> superclase, los dos m�todos existen pero al instanciar con:
>
> p = new snoopy();
> p.ladra();
>
> Flash mira primero en la clase snoopy si tiene un m�todo "ladra" y si lo
> tiene lo ejecuta, si no mirar� pasando por la cadena de herencia hasta
> que no encuentre el m�todo en las clases superiores.
>
> Perro = function() {}
> Perro.prototype = new Animal();
> Perro.prototype.ladra = function()
> {
> trace("metodo ladra desde Perro")
>
> }
>
> Snoopy = function() {}
> Snoopy.prototype = new Perro();
> Snoopy.prototype.noladra= function()
> {
> trace("metodo ladra desde snoopy");
>
> }
> a = new Snoopy();
> a.ladra();//metodo ladra desde Perro
>
> De hecho, yo puedo definir tres clases que heredan una de otra todas con
> el mismo m�todo "ladra" pero cual de los m�todos se va ejecutar depende
> de que clase instanciamos:
>
> Ser = function() {}
>
> Animal = function() {}
> Animal.prototype = new Ser();
> Animal.prototype.ladra = function()
> {
> trace("metodo ladra desde Animal")
> }
>
> Perro = function() {}
> Perro.prototype = new Animal();
> Perro.prototype.ladra = function()
> {
> trace("metodo ladra desde Perro")
> }
>
> Snoopy = function() {}
> Snoopy.prototype = new Perro();
> Snoopy.prototype.ladra= function()
> {
> trace("metodo ladra desde snoopy");
> }
> a = new Snoopy();
> a.ladra();
> b = new Perro();
> b.ladra();
> c = new Animal();
> c.ladra();
>
> Por lo menos yo lo entiendo as�, no se si me estoy equivocando?�?�
>
> Otro ejemplo de pasar los par�metros a superclase
> est� claro con el ejemplo que has puesto.
>
> salu2++
> +kenike.dot.org+
>
>
> -----------------------------------------------
> El correo comprobado con
> Norton AntiVirus Corporate Edition
>
>
> -----Mensaje original-----
> De: Joseba Alonso [mailto:[EMAIL PROTECTED]]
> Enviado el: viernes, 20 de septiembre de 2002 15:40
> Para: flashmaestro List Member
> Asunto: [flashmaestro] [MX] OOP: herencia
>
>
> >
> > Tambien otra cosa interesante de MX es el comando "super" porque con
> el
> > podemos llamar a los m�todos de las clases superiores a la nuestra sin
> > importar como se llaman. En el mismo ejemplo de a!e:
> >
> > snoopy.prototype = new perro();
> > snoopy.prototype.firmaAutografo = function(){
> > trace("�A quien se lo dedico?");
> > super.ladra();
> > super.respira();
> > }
>
> Ah� no esta correctamente utilizado ya que al crear la herencia asi:
>
> snoopy.prototype = new perro();
>
> los metodos de perro son automaticamente copiados en la clase snoopy.
>
> Demostracion. Tu ejemplo funcionaria perfectamente sin usar super, solo
> con
> this.
>
> snoopy.prototype = new perro();
> snoopy.prototype.firmaAutografo = function(){
> trace("�A quien se lo dedico?");
> this.ladra();
> this.respira();
> }
>
> El comando super es mas para la reutilizacion. Siguiendo el mismo
> ejemplo la
> utilizacion correcta de super seria al sobreescribir el metodo y querer
> usar
> el metodo de la clase superior.
>
> snoopy.prototype = new perro();
> snoopy.prototype.ladra = function(){
> super.ladra();
> trace("Soy un perro que ladra y habla");
> }
>
> p = new snoopy();
> p.ladra();
>
>
> Un ejemplo mas claro de super es para usar los constructores de las
> super
> clases y a�adirle algo en el propio contructor mas especifico de las
> subclases. Siguiendo el ejemplo de a!e
>
> animal = function(nombre){
> this.nombre = "Mi nombre es "+nombre;
> }
>
> perro = function(nombre){
> super(nombre);
> this.nombre += " y soy un perro"
> }
>
> perro.prototype = new animal();
>
> snoopy = function(nombre){
> super(nombre);
> this.nombre += " que habla";
> }
>
> snoopy.prototype = new perro();
>
> var p1 = new animal("pepo");
> trace(p1.nombre)
> var p2 = new perro("Churchil");
> trace(p2.nombre);
> var p3 = new snoopy("Snoopy");
> trace(p3.nombre)
>
> Un saludo
>
> Joseba Alonso
> www.sidedev.net
>