herencia Javascript bucle infinito

votos
18

Puedo crear este bloque de código en javascript:

function Shape() {}
Shape.prototype.name = Shape;
Shape.prototype.toString = function() {
    result = [];
    if(this.constructor.uber) {
        result[result.length] = this.constructor.uber.toString();
    }
    result[result.length] = this.name;
    return result.join(', ');
}


function twoDShape() {};
twoDShape.prototype = new Shape();
twoDShape.prototype.constructor = twoDShape;

twoDShape.uber = twoDShape.prototype;
twoDShape.name = twoD Shape;

var a = new twoDShape();
console.log(a.toString());

No sé por qué, pero cuando lo ejecuto, Firefox es la congelación. He estado tratando horas para averiguarlo. Y yo creo que es no debe haber una infinidad de bucles en mi código y que vive en algún lugar de la condición if, pero no he encontrado a cabo. ¿Podría alguien me ayude a salir de este dolor de cabeza. ¡Gracias!

Publicado el 19/10/2012 a las 07:33
por usuario
En otros idiomas...                            


2 respuestas

votos
2

Cuando se llama a this.constructor.uber.toString()partir de Shape.prototype.toString, uberes twoDShape.prototypeque es una Shape, y para que toStringel método es Shape.prototype.toStringnuevo.

Y que provoca un bucle infinito.

Respondida el 19/10/2012 a las 07:50
fuente por usuario

votos
0

así, después de probar una buena cantidad de pruebas, finalmente conseguí una pista. Y creo que esto es una respuesta a mi propia pregunta anterior. Escribiendo: a.constructor.uber.constructor === twoDShape en Firefox, devuelve true. Y es por eso que causa bucle infinito.

Respondida el 19/10/2012 a las 08:07
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more