オブジェクト指向プログラミングでは、多くの言語が機能の過負荷をサポートし、関数によって渡されるさまざまな数字とパラメーターの種類に応じて異なる操作を行うことができます。ただし、JSはそれをサポートしていないため、余分な小さなアクションを実行する必要があります。
JS関数実行コンテキストには、引数と呼ばれる興味深い変数があります。関数定義がそれほど多くの正式なパラメーターを定義していない場合でも、関数実行中に渡されたすべてのパラメーターを配列の形で保存します。別の特別な機能は、アレイタイプと比較して、引数変数には1つの長さの属性のみがあることです。プッシュ、ポップなどの配列メソッドにはありません。これは単なる「Pseudo-Array」です。長さの属性があり、保存された配列には配列アクセス文字[]がアクセスでき、読み取り専用で書き込みできません。
1。異なる数値の過負荷
ここでは、引数関数の長さ属性を判断するだけであることは非常に明確です。
コードコピーは次のとおりです。
<script type = "text/javascript">
function talk(msg、handler){
var len = arguments.length;
//パラメーターを渡すときに実行します
if(len == 1){
alert( "function says:"+msg);
}
// 2つのパラメーターが渡されたときに実行します
else if(len == 2){
ハンドラー(MSG);
}
}
talk( "demo");
talk( "demo"、function(w){alert( "Handler Says:"+w);});
</script>
2。さまざまな種類のパラメーターの過負荷
JSのような動的に型付けされた言語の場合、変数宣言の任意の性質は、開発者の心における厳格な変数タイプの重要性を軽視します(PS:ECMAシステムに基づいて、変数宣言の必須タイプを導入します)。多くの予期しないバグは、実際にこの変数タイプの自動変換によって引き起こされます。実際、JSは、変数の種類を厳密に検出するための非常に正確な方法を提供します。より一般的なものは、Typeofメソッドとコンストラクター属性です。
1。Typeof変数は変数タイプを返します
コードコピーは次のとおりです。
temp = "say"; //弦
temp = 1; //番号
temp =未定義; //未定義
temp = null; //物体
temp = {}; //物体
temp = []; //物体
temp = true; // boolean
temp = function(){} // function
アラート(typeof temp);
上記のテストを通じて、null、オブジェクト、アレイ、すべての返品オブジェクトタイプについて、次の方法を使用するとこの問題が解決できることがわかります。
2.構造属性は変数タイプを検出します
JSの各オブジェクトには、このオブジェクトを構築する関数を参照するために使用されるコンストラクター属性があります。この参照を判断することにより、変数タイプを検出できます。
コードコピーは次のとおりです。
temp = "say";
temp.constructor == string; //真実
temp = {};
temp.constructor == object; // true
temp = [];
temp.constructor == array; // true
上記のテストにより、配列とオブジェクトタイプの変数を簡単に区別できます。カスタムオブジェクトをテストして、何が起こるかを確認しましょう。
コードコピーは次のとおりです。
//カスタムオブジェクト
function ball(){}
//オブジェクトをインスタンス化します
var Basketball = new Ball();
Basketball.Constructor == Ball; //真実
これは、コンストラクター属性がカスタムオブジェクトにも適用できることを示しています。
上記の2つの方法の適用を理解した後、JS関数の過負荷のシミュレーションに戻りましょう。次の例は、パラメータータイプに従って過負荷です。
コードコピーは次のとおりです。
function talk(msg){
var t = typeof msg;
if(t == "string"){
アラート( "それは文字列です");
}
else if(t == "number"){
アラート( "それは数字です");
}
}
トーク(10); //文字列です
talk( "demo"); //それは番号です
添付されているのは、パラメーターの種類と数値を厳密に検出する非常に巧妙な機能です。
コードコピーは次のとおりです。
//パラメーターリストに基づいて変数リストのタイプを厳密に確認してください
関数Strict(タイプ、ARGS){
//パラメーターの数字とタイプカーネルが一致することを確認してください
if(types.length!= args.length){
//長さが一致しない場合、例外がスローされます
「無効な数の引数。
}
//各パラメーターを通過し、ベースタイプを確認します
for(var i = 0; i <args.length; i ++){
//特定のタイプのJavaScriptが一致しない場合、例外がスローされます
if(args [i] .constructor!= types [i]){
「無効な引数タイプ。予想」 +タイプ[i] .name + "を投げ、" + args [i] .constructor.name + "assing。";
}
}
}
//上記の方法の使用
関数dofunction(id、name){
//パラメーターの数とタイプを検出します
Strict([number、string]、arguments);
..
}