2010-03-26 10 views
7

अगर मैं है निम्नलिखित की तरह एक समारोह:क्या जावास्क्रिप्ट में अपरिभाषित कार्यों को संभालने का कोई तरीका है?

function catchUndefinedFunctionCall(name, arguments) 
{ 
    alert(name + ' is not defined'); 
} 

और मैं

foo('bar'); 

जब foo परिभाषित नहीं है की तरह कुछ मूर्ख करते हैं, वहाँ किसी तरह मैं अपने पकड़ समारोह कहा जाता हो सकती है, नाम 'foo' होने के साथ और तर्क 'बार' युक्त सरणी है?

उत्तर

10

मोज़िला जावास्क्रिप्ट 1.5 में वैसे भी है (यह गैर मानक है)।

इस की जाँच करें:

var myObj = { 
    foo: function() { 
     alert('foo!'); 
    } 
    , __noSuchMethod__: function (id, args) { 
     alert('Oh no! '+id+' is not here to take care of your parameter/s ('+args+')'); 
    } 
} 
myObj.foo(); 
myObj.bar('baz', 'bork'); // => Oh no! bar is not here to take care of your parameter/s (baz,bork) 

बहुत अच्छा। https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/NoSuchMethod

+0

यह बहुत अच्छा है और लगभग वही है जो मैं ढूंढ रहा था - क्या कोई समकक्ष है जो आईई 6+ में काम करता है? – Emory

+0

दिसम्बर 2015 तक, यह एक अप्रचलित कार्य है जिसका अब और उपयोग नहीं किया जाना चाहिए। –

0
someFunctionThatMayBeUndefinedIAmNotSure ? someFunctionThatMayBeUndefinedIAmNotSure() : throw new Error("Undefined function call"); 
5
try { 
foo(); 
} 
catch(e) { 
    callUndefinedFunctionCatcher(e.arguments); 
} 

UPDATED

अपने कार्य आप दे देंगे क्या आप मूल रूप से पास करने का प्रयास करने के लिए e.arguments गुजर।

+5

'तर्क' 'त्रुटि 'ऑब्जेक्ट की संपत्ति नहीं है, यह फ़ंक्शन की एक संपत्ति है। आपके उदाहरण में 'ई' एक त्रुटि वस्तु है और इसलिए' e.arguments' को अपरिभाषित किया जाएगा। –

+0

मुझे लगता है कि यह पकड़ने की सभी तरह की रणनीति है जो लोग दूर जाना चाहते हैं। – npup

+1

मैंने क्रोम में निम्नलिखित भाग लिया: { बार ('foo') आज़माएं; } कैच (ई) { अलर्ट (ई .र्गमेंट्स); के लिए (ई में एक्स) { चेतावनी (एक्स) } } यह अलर्ट 'foo' और ई की एक संपत्ति के रूप में तो अलर्ट 'तर्क' । मैं पागल हो रहा हूँ? या अभी भी गलत है? –