javascript方法の重荷重による災い

2187 ワード

まずコードを貼ります.実行結果はどうなりますか?
function ShowMsg() {
// 1   
this.sure = function () { alert("ok"); };
// 2
this.sure = function (msg) { alert(msg); }; } var showMsg = new ShowMsg(); showMsg.sure();
 上のコードを見てください.2つの方法で積載された関数だと思っていましたが、実行後には「ok」のメッセージが表示されます.実際には空の文字のボックスが開きます.
 
もともとjavascript関数を定義した場合、関数名は関数オブジェクトの識別であり、パラメータ数はこの関数の属性だけです.パラメータ数の異なる関数を定義することによって、重い荷物を運ぶことはできません.
上のコードを実行すると、javascriptは関数名で対応する関数オブジェクトを見つけ、関数によって定義されたパラメータと表式パラメータのリストを順番に合わせて、余分な参照を行います.
数を切り捨て、足りないパラメータはundefinedで処理し、関数コードを実行します.
 
javascriptオーバーロード関数は、関数コードを通じてパラメータ値とタイプを判断する必要があります.argmentsはjavascriptの中の一つの内蔵オブジェクトで、呼び出し時に伝達される実際の参照を含んでいます.
数を数える上のコードは以下のように変更できます.
function ShowMsg() {

  this.sure = function () {

    if(arguments.length==0){

        alert("ok");

       }

    if(arguments.length==1){

         if(arguments[0].constructor ==String){

          alert(arguments[0]);

          }

      }

    };

}

        

var showMsg = new ShowMsg();

showMsg.sure();
 実行後に「ok」が表示されます.