2010-03-26 4 views

risposta

10

C'è comunque in Mozilla Javascript 1.5 (non è standard).

Check this out:

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) 

piuttosto fresco. Per saperne di più: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/NoSuchMethod

+0

Questo è molto bello e quasi esattamente quello che stavo cercando - c'è un equivalente che funziona in IE 6+? – Emory

+0

A partire da dicembre 2015, questa è una funzione obsoleta che non dovrebbe più essere utilizzata. –

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

AGGIORNATO

passando e.arguments alla vostra funzione vi darà ciò che si è tentato di passare in origine.

+5

'arguments' non è una proprietà dell'oggetto' Error', è una proprietà di funzioni. Nell'esempio, 'e' è un oggetto errore e quindi' e.arguments' non sarà definito. –

+0

Penso che sia proprio questo tipo di controllo della strategia che tutti gli utenti vogliono evitare. – npup

+1

Ho appena eseguito quanto segue in chrome: try { bar ('foo'); } catch (e) { alert (e.arguments); per (x in e) { alert (x) } } avvisa 'foo' e quindi avvisa 'argomenti' come una proprietà di e. Sono pazzo? O semplicemente ancora sbagliato? –