オブジェクトを使用できargumentsます。
function myFunction(param1,param2)
{
if (arguments.length!=2)
{
// wrong param number!
}
...
}
あなたの編集によると:元の機能に触れることなく、自動化された形式のチェックを実装したい場合:
各関数を次のように処理する必要があります。
functionName = debug(functionName, numberOfExpectedArgs);
この操作は、引数の数をチェックして関数をラップします。
したがって、サンプル関数はそのままにしておきます。
// this is the original function... we want to implement argument number
// checking without insertint ANY debug code and ANY modification
function myFunction(a,b,c)
{
return a + " " + b + " " + c;
}
// the only addition is to do this...
myFunction = debug(myFunction,3); // <- implement arg number check on myFunction for 3 args
// let's test it...
console.log(myFunction(1,2,3));
console.log(myFunction(1,2));
このdebug()関数を実装する必要があります:
function debug(f, n)
{
var f2 = f;
var fn = function()
{
if (arguments.length!=n) console.log("WARNING, wrong argument number");
return f2.apply(f2, arguments);
};
return fn;
}
このソリューションは、既に定義されている関数に従って完全に透過的であるため、求めるものになる可能性があります。非推奨 (いくつかあります) とクロスブラウザーの互換性を確認することを強くお勧めします。