हम सभी जानते हैं कि for-in-loops सरणी पर absolutely evil हैं। फिर भी, उनका उपयोग अक्सर किया जाता है और कारण त्रुटियों का पता लगाने के लिए जटिल होते हैं, खासकर जब ब्राउज़र-निर्भर होने के कारण indexOf
-shims या ऐसे।क्या यह फॉर-इन लूप डिटेक्शन स्निपेट अवांछित झूठी सकारात्मक उत्पन्न करेगा?
Object.defineProperty(Array.prototype, "error", {
enumerable: true,
get: function() {
if (this === Array.prototype) // that looks OK
return undefined;
if (window.confirm("Somebody who coded the site you're viewing runs through an Array with a for-in-loop.\nShame on him!\n\nDo you want to raise an Error to trace the origin?"))
throw new SyntaxError("Array traverse with for-in-loop, touching Array.prototype's 'error' property :-)");
}
});
आप इसके लिए एक Greasemonkey स्क्रिप्ट के रूप में जोड़ सकते हैं:
तो, मैं इस सरल टुकड़ा जो Array.prototype
(नहीं उत्पादन कोड में उपयोग के लिए) पर एक "error
" संपत्ति के लिए एक गणनीय गेटर कहते कोड किया है सभी डोमेन, और आप लगभग हर साइट पर अलर्ट देखेंगे :-) उनमें से अधिकतर संदिग्ध तर्कों के साथ jQuery.extend
पर कॉल के कारण होते हैं, बीटीडब्ल्यू।
मेरा प्रश्न है: किसी भी स्थितियों कि वैध ऐसे "गलत" लूप, या कुछ और गलत सकारात्मक अलर्ट के कारण वहाँ हैं?
मुझे आश्चर्य है कि यह मेरे कोड की उपयोगिता को कैसे प्रभावित करेगा।
मैंने इसे कम व्यक्तिपरक बनाने के लिए आपके प्रश्न को संपादित किया। मुझे आशा है कि आपको बुरा लगेगा। – hugomg
धन्यवाद, मुझे वह संस्करण पसंद है - मुझे शीर्षक के रूप में उपयोग करने के लिए कोई संकेत नहीं था :-) – Bergi
मुझे यह नहीं मिला है, आप इसे 'Array.prototype'' तक कैसे बढ़ाते हैं? आपको '__lookupGetter__' या कुछ का उपयोग करने की आवश्यकता होगी। अब यह केवल एक त्रुटि का कारण बन जाएगा क्योंकि विस्तारित कार्य इसे प्राप्त करेगा और त्रुटि फेंक दी जाएगी और प्रतिलिपि रोक दी जाएगी। http://jsfiddle.net/MvgJC/ – Esailija