Η Javascript κληρονομιά άπειρο βρόχο

ψήφοι
18

Έχω δημιουργήσει αυτό το μπλοκ του κώδικα σε 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());

Δεν ξέρω γιατί, αλλά όταν το τρέχω, firefox είναι το πάγωμα. Έχω προσπαθήσει ώρες για να το καταλάβω. Και η εικασία μου είναι να υπάρχει ένας άπειρος βρόχων στον κώδικα μου και ζει κάπου στην περίπτωση κατάσταση, αλλά δεν το μάθετε. Θα μπορούσε κάποιος να με βοηθήσει από αυτή πονοκέφαλο. Ευχαριστώ!

Δημοσιεύθηκε 19/10/2012 στις 07:33
χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
2

Όταν καλείτε this.constructor.uber.toString()από Shape.prototype.toString, uberείναι twoDShape.prototypeποια είναι Shape, και έτσι η toStringμέθοδος είναι Shape.prototype.toStringκαι πάλι.

Και αυτό προκαλεί ένα άπειρο βρόχο.

Απαντήθηκε 19/10/2012 στις 07:50
πηγή χρήστη

ψήφοι
0

καλά, αφού προσπαθεί ένα δίκαιο ποσό των δοκιμών, πήρα τελικά μια ιδέα. Και πιστεύω ότι αυτό είναι μια απάντηση για τη δική μου ερώτηση παραπάνω. Πληκτρολογώντας: a.constructor.uber.constructor === twoDShape στο firefox, επιστρέφει true. Και γι 'αυτό προκαλεί άπειρο βρόχο.

Απαντήθηκε 19/10/2012 στις 08:07
πηγή χρήστη

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