javascript方法の重荷重による災い
2187 ワード
まずコードを貼ります.実行結果はどうなりますか?
もともとjavascript関数を定義した場合、関数名は関数オブジェクトの識別であり、パラメータ数はこの関数の属性だけです.パラメータ数の異なる関数を定義することによって、重い荷物を運ぶことはできません.
上のコードを実行すると、javascriptは関数名で対応する関数オブジェクトを見つけ、関数によって定義されたパラメータと表式パラメータのリストを順番に合わせて、余分な参照を行います.
数を切り捨て、足りないパラメータはundefinedで処理し、関数コードを実行します.
javascriptオーバーロード関数は、関数コードを通じてパラメータ値とタイプを判断する必要があります.argmentsはjavascriptの中の一つの内蔵オブジェクトで、呼び出し時に伝達される実際の参照を含んでいます.
数を数える上のコードは以下のように変更できます.
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」が表示されます.