Javascript dziedziczenie nieskończonej pętli

głosy
18

Tworzę ten blok kodu w 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());

Nie wiem dlaczego, ale kiedy go uruchomić, firefox jest zamrożenie. Byłem godzin próbując zrozumieć. I wydaje mi się, że powinno być nieskończonej pętli w moim kodu i żyje gdzieś w jeśli warunek, ale nie znaleźliśmy go. Czy ktoś mógłby mi pomóc z tym bólem. Dziękuję Ci!

Utwórz 19/10/2012 o 07:33
użytkownik
W innych językach...                            


2 odpowiedzi

głosy
2

Podczas rozmowy telefonicznej this.constructor.uber.toString()z Shape.prototype.toString, uberto twoDShape.prototypeco jest Shapei tak, że toStringmetoda ta jest Shape.prototype.toStringponownie.

A to powoduje nieskończoną pętlę.

Odpowiedział 19/10/2012 o 07:50
źródło użytkownik

głosy
0

dobrze, po wypróbowaniu sporo testów, ale w końcu mam pojęcia. I wierzę, że jest to odpowiedź na moje własne pytanie powyżej. Wpisanie: a.constructor.uber.constructor === twoDShape w firefox, to zwraca true. A to dlatego, że powoduje nieskończoną pętlę.

Odpowiedział 19/10/2012 o 08:07
źródło użytkownik

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