FunctionH.overload には 2 つのパラメーターが含まれており、1 つは一致条件の処理を担当するディスパッチャー関数です (オプション)もう 1 つは関数マッピング テーブルのセットです。たとえば、呼び出される 3 つのパラメーターは 10、「a」、および [1,2] です。 "number"、string、array" を生成します。パターン マッチングを実装する場合、関数マッピング テーブルの各 "キー" に基づいて正規表現が生成されます。この正規表現は、ディスパッチャ関数の戻り値と一致するために使用されます。一致する場合は、対応するキーが呼び出されます。そうでない場合は、シーケンス内の次のキーと一致します。例:
ret = []; i = 0; i & lt; prop.length; i ) {
ret[i] = ObjectH.getEx(obj, prop[i]);
}
🎜>},
"*,string,*": function( obj, prop, returnJson) {
var key = (prop "").split(".");
ret = obj;
for (var i = 0; i & lt; keys.length ; i ) {
ret = ret[keys[i]]
}
if (returnJson) {
var json = {};
json[prop] = ret;
return
}
return;
}
OK、一部の人にとっては、このフォームは元のフォームよりも優れているように見えるかもしれませんが、実際にはさらに進めることができます -
コードをコピー
コードは次のとおりです:
getEx: FunctionH.overload(function(args) {
return "prop は " ObjectH.getType(args[1]);
},{
"prop は配列": function(obj, prop, returnJson) {
if (returnJson) {
ret = {};
for (var i = 0; i & lt; prop.length; i ) {
ret [prop[i]] = ObjectH.getEx(obj, prop[i]);
}
} else {
//getEx(obj, props)
ret = []; >for (var i = 0; i & lt; prop.length; i ) {
ret[i] = ObjectH.getEx(obj, prop[i]);
}
}
return ret;
},
"prop は string": function(obj, prop, returnJson) {
var key = (prop "").split("."); obj;
for (var i = 0; i & lt; keys.length; i ) {
ret = ret[keys[i]]
}
if (returnJson); >var json = {};
json[prop] = ret;
return
}
}),
「迷惑な」3 番目のパラメータもあるので、これも単純に処理しました -
コードをコピー
"prop は配列であり、returnJson は true": function(obj, prop, returnJson) {
ret = {},{
for (var i = 0; i & lt; prop .length ; i ) {
ret[prop[i]] = ObjectH.getEx(obj, prop[i]);
return
},
" array と returnJson は false": function(obj, prop, returnJson) {
ret = [];
for (var i = 0; i & lt; prop.length; i ) {
ret[ i] = ObjectH.getEx(obj, prop[i]);
}
return ret;
},
「prop は文字列で、returnJson は true」: function(obj, prop, returnJson ) {
var key = (prop "").split(".");
ret = obj;
for (var i = 0; i & lt;keys.length; i ) {
ret = ret[keys[i]];
var json = {};
return json; prop は文字列で、returnJson は false": function(obj, prop, returnJson) {
var key = (prop "").split(".");
ret = obj;
for (var i = 0; i & lt; キーの長さ; i ) {
ret = ret[keys[i]]
戻り値
}); >
たとえば、ブラウザのスニッフィングや機能検出でもこのモードを使用できます (もちろん、この形式には長所と短所があり、ユーザーは自分で比較検討できます) -
コードをコピー
コードは次のとおりです:
foo = FunctionH.overload(function() {
return MSIE ? "IE": " NotIE";
},{
"IE": function() {...}
"NotIE": function() {...}
});