ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript で関数のオーバーロードを実装できますか?

JavaScript で関数のオーバーロードを実装できますか?

青灯夜游
青灯夜游オリジナル
2022-01-18 14:52:002215ブラウズ

JavaScript は関数のオーバーロードを実装できます。 JavaScript 関数内には引数オブジェクトがあります。引数オブジェクトを通じてパラメータ リストを取得できます。パラメータの数を決定し、さまざまなメソッドを使用して関数のオーバーロード効果をシミュレートできます。

JavaScript で関数のオーバーロードを実装できますか?

このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

JavaScript 関数はオーバーロードをサポートしていますか?関数のオーバーロードを実装することは可能ですか?この問題に関しては、大きく 2 つのポイントがあり、1 つ目は JavaScript 関数、2 つ目はオーバーロードです。

まず、オーバーロードについて話しましょう。いわゆるオーバーロードとは、簡単に言うと、関数やメソッドの名前は同じでパラメータのリストが異なることをいい、このような名前が同じでパラメータの異なる関数やメソッドをオーバーロードされた関数やメソッドと呼びます。したがって、オーバーロードには主に 2 つのポイントが必要です。1 つは同じ関数名です。 2 番目に、関数パラメータが異なります。

オーバーロードの定義を明確にした後、JavaScript に戻ります。その起源をたどると、今 JavaScript について話すとき、JavaScript の標準である ECMAScript を思い浮かべることができます。では、この規格では機能についてどのような仕様が定められているのでしょうか?

まず第一に、ECMAScript には関数シグネチャの概念がありません。これは、ECMAScript のパラメータが 0 個以上の値を含む配列で表されるためです。関数シグネチャがなければ、真のオーバーロードは不可能です。

2 番目に、同じ名前の 2 つの関数が ECMAScript で定義されている場合、次のように、その名前は後で定義された関数にのみ属します。

function add(num){
    return num+1;
}
function add(num){
    return num+2;
}
var result = add(4);  //结果为6

上の例では、add() 関数2 回定義されていますが、呼び出すと 2 番目の関数が直接呼び出されます。これは、JavaScript では、後で定義された関数が最初に定義された関数を上書きすることを示しています。

これを踏まえて、JavaScript は関数のオーバーロードをサポートしていないと結論付けることができますか?

JavaScript の引数オブ​​ジェクトを紹介します。まず、ECMAScript 関数のパラメーターは、他の言語の関数パラメーターとは少し異なります。 ECMAScript 関数は、渡されるパラメータの数とタイプを考慮しません。つまり、2 つのパラメーターのみを受け入れるように関数を定義した後でも、呼び出し時に 0 個以上のパラメーターを渡すことができます。これによってエラーが発生することはありません。理由は引数オブジェクトにあります。 ECMAScript では、関数のパラメータは常に配列に格納され、この配列には引数オブジェクトを通じてアクセスできます。したがって、関数呼び出し時に渡されたパラメーターの数を判断するには、length 属性を使用するだけです。

そういえば、次のように書いてみることもできます:

function add(num1, num2){
    if(arguments.length == 1){
        alert("你输入的只有一个数字:"+arguments[0]+" 请重新输入");
    }else if(arguments.length == 2){
        alert("你输入数字的和为:" + arguments[0]+arguments[1]);
}
}

この例を通して、関数に渡されるパラメータの数をチェックすることで、JavaScript 関数が異なる値を作成できることがわかります。過負荷の目的を間接的に達成できる反応。

つまり、JavaScript は関数のオーバーロードを模倣することができます。

【関連する推奨事項: JavaScript 学習チュートリアル

以上がJavaScript で関数のオーバーロードを実装できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。