moștenire Javascript buclă infinită

voturi
18

Am creat acest bloc de cod în 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());

Nu știu de ce, dar când l-am alerga, firefox este congela. Am încercat de ore să-l dau seama. Și ghici mea este că ar trebui să fie un bucle infinit în codul meu și trăiește undeva în cazul în care starea, dar nu am găsit afară. Ar putea cineva să mă ajute din această durere de cap. Mulțumesc!

Întrebat 19/10/2012 la 07:33
de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
2

Când apelați this.constructor.uber.toString()la Shape.prototype.toString, ubereste twoDShape.prototypeceea ce este o Shape, și astfel că toStringmetoda este Shape.prototype.toStringdin nou.

Și care cauzează o buclă infinită.

Publicat 19/10/2012 la 07:50
sursa de către utilizator

voturi
0

bine, după ce a încercat o mare cantitate de testare, am avut în sfârșit un indiciu. Și cred că acest lucru este un răspuns pentru întrebarea mea de mai sus. Tastarea: a.constructor.uber.constructor === twoDShape în firefox, returnează adevărat. Și de aceea provoacă buclă infinită.

Publicat 19/10/2012 la 08:07
sursa de către utilizator

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