Javascript Vererbung Endlosschleife

stimmen
18

Ich schaffe diese Code-Block 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());

Ich weiß nicht, warum, aber wenn ich es laufen, firefox ist einfrieren. Ich habe Stunden versucht, es herauszufinden. Und meine Vermutung ist, sollte es eine Endlosschleifen in meinem Code und es lebt irgendwo in der, wenn die Bedingung, aber ich fand es nicht aus. Könnte mir jemand aus diesen Kopfschmerzen helfen. Vielen Dank!

Veröffentlicht am 19/10/2012 um 07:33
vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Wenn Sie anrufen this.constructor.uber.toString()aus Shape.prototype.toString, uberist twoDShape.prototypedie eine ist Shape, und so , dass toStringMethode Shape.prototype.toStringwieder.

Und das führt zu einer Endlosschleife.

Beantwortet am 19/10/2012 um 07:50
quelle vom benutzer

stimmen
0

gut, nachdem eine angemessene Menge an Test versucht, ich habe endlich einen Anhaltspunkt. Und ich glaube, das über eine Antwort auf meine eigene Frage. Typisierung: a.constructor.uber.constructor === twoDShape in firefox, es gibt true zurück. Und das ist, warum es Endlosschleife verursacht.

Beantwortet am 19/10/2012 um 08:07
quelle vom benutzer

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