मैं अपने अनुप्रयोगों में से एक के लिए "मॉड्यूल" को संभालने में एक वैश्विक त्रुटि लिख रहा हूं।मैं जावास्क्रिप्ट में फ़ंक्शन कैसे लपेटूं?
एक विशेषता जो मैं चाहता हूं वह एक प्रयास {} कैच {} ब्लॉक के साथ आसानी से एक फ़ंक्शन को लपेटने में सक्षम होना है, ताकि उस फ़ंक्शन के सभी कॉल में स्वचालित रूप से त्रुटि हैंडलिंग कोड होगा जो मेरे कॉल को कॉल करेगा वैश्विक लॉगिंग विधि। (कोशिश/पकड़ ब्लॉक के साथ हर जगह कोड प्रदूषण से बचने के लिए)।
हालांकि, यह जावास्क्रिप्ट, .call और .apply विधियों, और "यह" कीवर्ड के निम्न-स्तरीय कार्यप्रणाली की मेरी समझ से थोड़ा सा है।
Object.extend(Function.prototype, {
TryCatchWrap: function() {
var __method = this;
return function() {
try { __method.apply(this, arguments) } catch(ex) { ErrorHandler.Exception(ex); }
}
}
});
कौन इस तरह प्रयोग किया जाता है:
function DoSomething(a, b, c, d) {
document.write(a + b + c)
alert(1/e);
}
var fn2 = DoSomething.TryCatchWrap();
fn2(1, 2, 3, 4);
कि कोड पूरी तरह से काम करता है
मैं इस कोड, प्रोटोटाइप के Function.wrap पद्धति पर आधारित लिखा था। यह 6 प्रिंट करता है, और फिर मेरे वैश्विक त्रुटि हैंडलर को कॉल करता है।
मेरा प्रश्न है ... क्या यह कुछ तोड़ देगा जब मैं जिस फ़ंक्शन को लपेट रहा हूं वह किसी ऑब्जेक्ट के भीतर है, और यह "यह" ऑपरेटर का उपयोग करता है? मैं थोड़ी चिंतित हूं क्योंकि मैं फोन कर रहा हूं। ठीक है, वहां कुछ गुजर रहा है, मुझे डर है कि यह कुछ तोड़ सकता है।
ठीक है, इसलिए प्रदूषण की प्राथमिकता के अलावा या नहीं ... आपका अंतिम कोड स्निपेट मेरा जैसा दिखता है। क्या मुझे इस से समझना चाहिए कि मेरा कोड ऑब्जेक्ट्स और "यह" कीवर्ड के साथ काम करता है? धन्यवाद! –
हां: आप लपेटकर विधि में "यह" और मूल तर्क दोनों पास करते हैं। लेकिन आप अपना परिणाम वापस नहीं करते हैं, अपूर्ण लपेटते हैं। लेकिन इससे कोई फर्क नहीं पड़ता कि आप एक ऐसा फ़ंक्शन लपेटते हैं जो मूल्य वापस नहीं करता है। –