Javascript arv uendelig løkke

stemmer
18

Jeg oppretter denne blokken av kode i 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());

Jeg vet ikke hvorfor, men når jeg kjører den, er firefox fryse. Jeg har prøvd timer for å finne ut av det. Og min gjetning er at det bør være en uendelig løkker i koden min, og det bor et sted i om tilstanden, men jeg fant ikke det ut. Kan noen hjelpe meg ut av denne hodepine. Takk skal du ha!

Publisert på 19/10/2012 klokken 06:33
bruker
På andre språk...                            


2 svar

stemmer
2

Når du ringer this.constructor.uber.toString()fra Shape.prototype.toString, uberer twoDShape.prototypenoe som er en Shape, og slik at toStringmetoden er Shape.prototype.toStringigjen.

Og det fører til en uendelig loop.

Svarte 19/10/2012 kl. 06:50
kilden bruker

stemmer
0

vel, etter å ha prøvd en god del av testen, fikk jeg endelig en ledetråd. Og jeg tror dette er et svar på mitt eget spørsmål ovenfor. Typing: a.constructor.uber.constructor === twoDShape i firefox, går den i oppfyllelse. Og det er derfor det fører til uendelig loop.

Svarte 19/10/2012 kl. 07:07
kilden bruker

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