2010-03-26 44 views
7

如果我有像下面這樣的函數:有沒有辦法處理在JavaScript中調用未定義的函數?

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

我真的很喜歡

foo('bar'); 

沒有定義富時一些愚蠢的,是有一些方法可以讓我有打電話給我的捕捉功能,名字是'foo',參數是一個包含'bar'的數組?

回答

10

無論如何,這裏有Mozilla的Javascript 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

這是非常酷,幾乎正是我所期待的 - 有沒有相當於IE 6+的作品? – Emory 2010-04-02 17:05:36

+0

截至2015年12月,這是一個不應該再使用的過時功能。 – 2015-12-20 13:48:50

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

修訂

傳遞e.arguments你的功能會給你你想本來通過什麼。

+5

'arguments'不是'Error'對象的屬性,它是函數的一個屬性。在你的例子中'e'是一個錯誤對象,所以'e.arguments'將會是未定義的。 – 2010-03-27 00:07:27

+0

我認爲這只是檢查人們想要擺脫的全面策略。 – npup 2010-03-27 01:37:25

+1

我剛剛在Chrome中運行以下代碼: 嘗試bar('foo'); (e){ alert(e.arguments); } 它提醒'foo',然後警告'參數'作爲e的一個屬性。我瘋了嗎?或者還是錯了? – 2010-03-27 04:24:02

相關問題