Math
ऑब्जेक्ट का कारण सरल है: "क्योंकि जावा इसे करता है"। कारणों का सबसे अच्छा नहीं है, लेकिन यहां हम हैं। मुझे लगता है कि डगलस क्रॉकफोर्ड ने आधा भाषा * दबाने के लिए अपना अभियान शुरू करने से पहले चीजों को और अधिक समझ में डाल दिया। मूल रूप से आप "की अनुमति" थे, या मतलब, इस तरह काम करने के लिए:
with (Math) {
var n = min(round(a) * round(b), sqrt(c));
var result = exp(n + d);
}
दोष Number.prototype
का विस्तार करने के लिए कि किसी और ही बात कर सकता है। या बदतर, उदाहरण के लिए, को सममित राउंडिंग फ़ंक्शन के रूप में परिभाषित करें।
यदि आप अपने जीवन को आसान बनाने के तरीकों की तलाश में हैं, तो वहां क्यों रुकें? क्यों वैश्विक कार्यों के रूप में Math
कार्यों को शामिल नहीं करते?
var m = 'abs acos asin atan atan2 ceil cos exp floor log max min ' +
'pow random round sin sqrt tan PI').split(' ');
for (var i=0,l=m.length; i<l; i++) {
window[ m[i] ] = Math[ m[i] ];
}
यह सभी गणित कार्यों को वैश्विक दायरे में छोड़ देगा, प्रभावी रूप से आपको "गणित" टाइप करना बंद कर देगा। अपने आप से पूछें: क्या Number
को विस्तारित करने और इन कार्यों के साथ window
विस्तार करने के बीच कोई वास्तविक अंतर है?
* इससे पहले कि आप मुझे ज्वाला दें: क्रॉकफोर्ड टिप्पणी गंभीरता से लेने के लिए नहीं है। मैं उनके साथ सहमत हूं कि with
एक अंतर्निहित वैश्विक पर्यावरण में बहुत खतरनाक है।
आप काफी कुछ भी लेकिन सरणी वस्तु का विस्तार कर सकते कर सकते हैं। यह ऐरे ऑब्जेक्ट है जहां विस्तार करना परेशान होता है क्योंकि आप इसके लिए सिमपेल नहीं कर सकते हैं ..in लूप (हाँ मुझे पता है कि आप एक के लिए उपयोग कर सकते हैं() लेकिन यह सिर्फ इतना बदसूरत दिखता है। –
@Pim Jager: आपको नहीं होना चाहिए किसी भी तरह से ... के लिए उपयोग करना - यह वस्तुओं के लिए है। यही कारण है कि * असली * नो-नो ऑब्जेक्ट.प्रोटोटाइप का विस्तार कर रहा है ... – Shog9
यदि आपका जावास्क्रिप्ट संस्करण ऑब्जेक्ट.डेफिनप्रॉपर्टी का समर्थन करता है तो आप विस्तार कर सकते हैं। विकल्प विकल्प है : झूठी – dresende