js でメソッドのオーバーロードを直接実装する方法がないことは誰もが知っています。同じ名前でパラメータの数が異なる複数のメソッドが js で定義されている場合、実際に呼び出せるのは最後のメソッドのみで、他のすべてのメソッドは上書きされるからです。が落ちた。
ただし、各関数には特別なパラメータ引数があり、これを使用してメソッドのオーバーロードを実装できます。
例:
function Add(firstnumber ,sencondnumber) {
return firstnumber secondnumber;
}
はパラメーターが 2 つしかない場合、またはパラメーターが 1 つしか処理できない。パラメータが渡されない場合、firstnumber と Sencondnumber は未定義になります。パラメータが渡された場合は、firstnumber のみに値を割り当てることと同じであり、sencondnumber は未定義のままです。逆に、3 つ以上のパラメータが渡された場合は、firstnumber と Secondnumber に値が割り当てられているのと等価ですが、他にもパラメータがありますが、それらは処理中に無視されます。他のパラメータも取得できれば自然に処理できます。この時点で、関数の特別なパラメータの引数を考えることができます。これには、関数に渡されるすべてのパラメータが含まれており、これを使用してメソッドのオーバーロードの効果を実現できます。
上記のメソッドは次のように変更されます:
function Add(firstnumber,sencondnumber) {
if (arguments.length == 0)//パラメータは渡されません
{
return null
}
else; if (arguments.length == 1) {//渡されるのはパラメータです
return firstnumber;// return argument[0] と書くこともできます
}
else if(arguments. length == 2)//渡されるのは 2 つのパラメータです
{
return firstnumber Sencondnumber;// return argument[0] argument[1] としても記述できます
else {
var total =0;
for (var i = 0; i < argument.length; i ) {
total=合計引数[i]
}
return total;
}
}
もちろん、このメソッドの欠点は、関数の実装が順序に依存している場合、パラメータの順序が崩れないことです。パラメータの場合は、プレースホルダとして null を渡すなどの特別な処理を実行する必要があります。
関数に渡されるパラメータは、厳密に関数が定義された順序で各パラメータに割り当てられるため、2 番目のパラメータにのみ値を割り当てたい場合は、2 つのパラメータを渡す必要があります。それ以外の場合は、渡された値は実際には割り当てられています。 最初のパラメータは指定されていますが、2 番目のパラメータには値が割り当てられていません。
たとえば、sencondnumber にのみ値を渡し、firstnumber には値を渡したくない場合は、次のように Add(null,2) を呼び出す必要があります (もちろん、関数は内部で特別な値を渡す場合)、このように Add(2) を呼び出すと、実際には値が firstnumber に渡されます。これは、パラメーターが渡される場合の呼び出しと同じです。