जावास्क्रिप्ट विरासत अनंत लूप

वोट
18

मैं जावास्क्रिप्ट में कोड के इस ब्लॉक बनाने के लिए:

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());

मैं पता नहीं क्यों, लेकिन जब मैं इसे चलाने के लिए, फ़ायरफ़ॉक्स फ्रीज है। मैं यह पता लगाने की कोशिश कर रहा घंटे कर दिया गया है। और मेरा अनुमान है कि मेरे कोड में एक अनंत लूप होना चाहिए और इसे कहीं अगर हालत में रहता है, लेकिन मैं इसे बाहर नहीं मिला है। किसी ने मुझे इस सिरदर्द से बाहर मदद कर सकता है। धन्यवाद!

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, यह सच देता है। और यही कारण है कि यह अनंत लूप का कारण बनता है है।

19/10/2012 को 08:07
का स्रोत उपयोगकर्ता

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