JavaScript dědičnost nekonečné smyčky

hlasů
18

I vytvořit tento blok kódu v jazyce 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());

Nevím proč, ale když jsem jej spustit, firefox je zmrazit. Snažil jsem se hodiny na to přijít. A já si myslím, že by měla být nekonečná smyčka v mém kódu, a to žije někde v Pokud je podmínka, ale nenašel jsem to. Mohl by mi někdo pomoci ven z této hlavy. Děkuji!

Položena 19/10/2012 v 07:33
uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Voláte-li this.constructor.uber.toString()z Shape.prototype.toString, uberje twoDShape.prototypekterý je Shape, a tak, že toStringmetoda je Shape.prototype.toStringznovu.

A, který způsobuje nekonečnou smyčku.

Odpovězeno 19/10/2012 v 07:50
zdroj uživatelem

hlasů
0

i poté, co se snaží slušné množství testu jsem se konečně dostal tušení. A věřím, že to je odpověď na mou vlastní otázku výše. Typing: a.constructor.uber.constructor === twoDShape ve Firefoxu, vrátí true. A to je důvod, proč to způsobuje nekonečnou smyčku.

Odpovězeno 19/10/2012 v 08:07
zdroj uživatelem

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