boucle infinie d'héritage Javascript

voix
18

Je crée ce bloc de code en 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());

Je ne sais pas pourquoi, mais quand je le lance, Firefox est le gel. J'ai essayé heures pour comprendre. Et je pense qu'il devrait y avoir une boucles infinies dans mon code et il vit quelque part dans la condition if, mais je ne le trouve pas sur. Quelqu'un pourrait-il me aider à sortir de ce casse-tête. Je vous remercie!

Créé 19/10/2012 à 07:33
utilisateur
Dans d'autres langues...                            


2 réponses

voix
2

Lorsque vous appelez à this.constructor.uber.toString()partir Shape.prototype.toString, uberest ce twoDShape.prototypequi est Shape, et que la toStringméthode est à Shape.prototype.toStringnouveau.

Et cela provoque une boucle infinie.

Créé 19/10/2012 à 07:50
source utilisateur

voix
0

bien, après avoir essayé une bonne quantité de test, j'ai finalement obtenu un indice. Et je crois que c'est une réponse à ma propre question ci-dessus. Taper: a.constructor.uber.constructor === twoDShape dans firefox, il retourne vrai. Et voilà pourquoi il provoque boucle infinie.

Créé 19/10/2012 à 08:07
source utilisateur

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