eredità Javascript ciclo infinito

voti
18

Ho creato questo blocco di codice in 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());

Non so perché, ma quando l'eseguo, Firefox è il congelamento. Ho cercato ore di capirlo. E la mia ipotesi è ci dovrebbe essere un loop infinito nel mio codice e vive da qualche parte nel se la condizione, ma non ho trovato fuori. Qualcuno potrebbe darmi una mano di questo mal di testa. Grazie!

È pubblicato 19/10/2012 alle 07:33
dall'utente
In altre lingue...                            


2 risposte

voti
2

Quando si chiama this.constructor.uber.toString()da Shape.prototype.toString, uberè twoDShape.prototypeche è una Shape, e in modo che toStringil metodo è Shape.prototype.toStringnuovo.

E che causa un ciclo infinito.

Risposto il 19/10/2012 a 07:50
fonte dall'utente

voti
0

bene, dopo aver provato una buona dose di prova, ho finalmente avuto un indizio. E credo che questa è una risposta per il mio domanda di cui sopra. Digitando: a.constructor.uber.constructor === TwoDShape in Firefox, restituisce vero. Ed è per questo che provoca ciclo infinito.

Risposto il 19/10/2012 a 08:07
fonte dall'utente

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