JavaScriptでは、関数はオブジェクトです。
JSにはメソッドの過負荷はありません
JavaScriptでは、メソッド(関数)の過負荷の概念はありません。
例:
コードコピーは次のとおりです。
<html>
<head>
<script type = "text/javascript">
関数add(number)
{
アラート(番号 + 20);
}
関数add(number、number1)
{
アラート(番号 + 30);
}
追加(10);
</script>
</head>
<body>
</body>
</html>
Webページの弾丸ボックスは40を示しています。
説明2番目の方法は2つのパラメーターですが、それでも呼び出されます。
2つのメソッドの順序を交換した後、ポップアップボックスには30が表示されます。パラメーターの数に関係なく、同じ名前の次の方法が呼び出されていることがわかります。
この現象を説明する方法は?
これは、関数宣言が実際にオブジェクトを作成するためです。
コードコピーは次のとおりです。
<html>
<head>
<script type = "text/javascript">
関数add(number)
{
アラート(番号 + 20);
}
/*
上記の関数は次のと同等です。
var add = function(number)
{
アラート(番号 + 20);
}
*/
関数add(number、number1)
{
アラート(番号 + 30);
}
/*
上記の関数は次のと同等です。
var add = function(number、number1)
{
アラート(番号 + 30);
}
*/
追加(10);
</script>
</head>
<body>
</body>
</html>
このようにして、追加の後続のオブジェクトを実際に指し示し、メソッドが呼び出されたときに割り当てられたパラメーターが順番にメソッドの正式なパラメーターに割り当てられ、後に割り当てられないパラメーターは未定義です。
JavaScript関数を呼び出すとき、パラメーターの数を厳密にチェックすることはありません。正式なパラメーターの数よりもパラメーターの実際の数が少ないことは問題ありません。割り当てられていない正式なパラメーターは未定義の値です。
また、実際のパラメーターの数が正式なパラメーターの数よりも大きい場合もあります。このようにして、以前の実際のパラメーターのみが使用され、追加の実際のパラメーターは使用されません。
関数オブジェクト
JavaScriptには関数オブジェクトがあり、すべてのカスタム関数は関数オブジェクトタイプです。
関数オブジェクトによって受信されたすべてのパラメーターは文字列タイプで、最後のパラメーターは実行される関数本文であり、前のパラメーターは関数が実際に受信する必要があるパラメーターです。
例:
コードコピーは次のとおりです。
<html>
<head>
<script type = "text/javascript">
var add = new function( "number"、 "number1"、 "alert(number + number1);");
var add = new function( "number"、 "alert(number + 20);");
追加(10、30);
</script>
</head>
<body>
</body>
</html>
暗黙のオブジェクト引数
JavaScriptでは、各関数には暗黙のオブジェクト引数があり、実際に関数に渡されたパラメーターを表します。
引数は、関数の正式なパラメーターとその数とは何の関係もありません。
引数には、実際のパラメーターの長さを示す有用な属性の長さがあります。これを使用して、関数の過負荷をシミュレートできます。
エクササイズの例:
コードコピーは次のとおりです。
<html>
<head>
<script type = "text/javascript">
関数add(number1、number2)
{
アラート(arguments.length);
アラート(引数[0]);
アラート(引数[1]);
アラート(引数[2]);
}
// add(2、3、4);
関数add2()
{
if(1 == arguments.length)
{
アラート(引数[0]);
}
else if(2 == arguments.length)
{
アラート(引数[0] +引数[1]);
}
else if(3 == arguments.length)
{
アラート(引数[0] +引数[1] +引数[2]);
}
}
add2(3);
add2(3、4);
add2(3、4、5);
</script>
</head>
<body>
</body>
</html>
各関数オブジェクトには長さの属性があり、関数が受信すると予想されるパラメーター形式を示します。
関数の引数とは異なります。 arguments.lengthは、関数によって実際に受信されたパラメーターの数を表します。
例:
コードコピーは次のとおりです。
<html>
<head>
<script type = "text/javascript">
var add = function(num、num2、num3)
{
アラート(num + num2 + num3);
}
アラート(add.length); //出力3
追加(1、2、3);
var add2 = function()
{
}
アラート(add2.length); //出力0
</script>
</head>
<body>
</body>
</html>