ホームページ >ウェブフロントエンド >jsチュートリアル >jsでメソッドのオーバーロードを実装するにはどうすればよいですか?および関数パラメータ issues_javascript スキル

jsでメソッドのオーバーロードを実装するにはどうすればよいですか?および関数パラメータ issues_javascript スキル

WBOY
WBOYオリジナル
2016-05-16 17:27:371143ブラウズ

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 に渡されます。これは、パラメーターが渡される場合の呼び出しと同じです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。