herança Javascript loop infinito

votos
18

I criar este bloco de código em 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());

Não sei porquê, mas quando eu executá-lo, o Firefox é o congelamento. Eu tenho tentado horas para descobrir isso. E o meu palpite é que deve haver uma loops infinitos em meu código e vive em algum lugar na condição if, mas eu não encontrá-lo fora. Alguém poderia me ajudar a sair desta dor de cabeça. Obrigado!

Publicado 19/10/2012 em 07:33
usuário
Em outras línguas...                            


2 respostas

votos
2

Quando você chamar this.constructor.uber.toString()a partir Shape.prototype.toString, uberé twoDShape.prototypeque é um Shape, e assim que toStringmétodo é Shape.prototype.toStringnovo.

E isso faz com que um loop infinito.

Respondeu 19/10/2012 em 07:50
fonte usuário

votos
0

bem, depois de tentar uma quantidade razoável de teste, eu finalmente tenho uma pista. E eu acredito que esta é uma resposta para a minha pergunta acima. Typing: a.constructor.uber.constructor === twoDShape no firefox, ele retorna true. E é por isso que faz com que loop infinito.

Respondeu 19/10/2012 em 08:07
fonte usuário

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