// 方法一:根据arguments的length属性来判断参数个数
function accMul(v1, v2, v3) {
var len = arguments.length;
if(len == 2) {
callFunc1(v1, v2);
} else if (len == 3) {
callFunc2(v1, v2, v3);
}
}
// 方法二:
var map = function (arr, callback, pThis) {
var len = arr.length;
var rlt = new Array(len);
for (var i = 0; i < len; i++) {
if (i in arr) {
rlt[i] = callback.call(pThis, arr[i], i, arr);
}
}
return rlt;
}
/**
* 函数参数重载方法 overload,对函数参数进行模式匹配。默认的dispatcher支持*和...以及?,"*"表示一个任意类型的参数,"..."表示多个任意类型的参数,"?"一般用在",?..."表示0个或任意多个参数
* @method overload
* @static
* @optional {dispatcher} 用来匹配参数负责派发的函数
* @param {func_maps} 根据匹配接受调用的函数列表
* @return {function} 已重载化的函数
*/
var FunctionH = {
overload: function (dispatcher, func_maps) {
if (!(dispatcher instanceof Function)) {
func_maps = dispatcher;
dispatcher = function (args) {
var ret = [];
return map(args, function (o) { return typeof o}).join();
}
}
return function () {
var key = dispatcher([].slice.apply(arguments));
for (var i in func_maps) {
var pattern = new RegExp("^" + i.replace("*", "[^,]*").replace("...", ".*") + "$");
if (pattern.test(key)) {
return func_maps[i].apply(this, arguments);
}
}
}
}
};
// 具体实现函数, 根据具体需求,自定义
var Calculate = FunctionH.overload({
'number,number': function () {
return arguments[0] + arguments[1];
},
'number,number,number': function () {
return arguments[0] * arguments[1] * arguments[2];
},
'string,string': function () {
return Number(arguments[0]) + Number(arguments[1]);
},
});
function accMul(v1, v2, v3) {
var len = arguments.length;
if(len == 2) {
callFunc1(v1, v2);
} else if (len == 3) {
callFunc2(v1, v2, v3);
}
}
// 方法二:
var map = function (arr, callback, pThis) {
var len = arr.length;
var rlt = new Array(len);
for (var i = 0; i < len; i++) {
if (i in arr) {
rlt[i] = callback.call(pThis, arr[i], i, arr);
}
}
return rlt;
}
/**
* 函数参数重载方法 overload,对函数参数进行模式匹配。默认的dispatcher支持*和...以及?,"*"表示一个任意类型的参数,"..."表示多个任意类型的参数,"?"一般用在",?..."表示0个或任意多个参数
* @method overload
* @static
* @optional {dispatcher} 用来匹配参数负责派发的函数
* @param {func_maps} 根据匹配接受调用的函数列表
* @return {function} 已重载化的函数
*/
var FunctionH = {
overload: function (dispatcher, func_maps) {
if (!(dispatcher instanceof Function)) {
func_maps = dispatcher;
dispatcher = function (args) {
var ret = [];
return map(args, function (o) { return typeof o}).join();
}
}
return function () {
var key = dispatcher([].slice.apply(arguments));
for (var i in func_maps) {
var pattern = new RegExp("^" + i.replace("*", "[^,]*").replace("...", ".*") + "$");
if (pattern.test(key)) {
return func_maps[i].apply(this, arguments);
}
}
}
}
};
// 具体实现函数, 根据具体需求,自定义
var Calculate = FunctionH.overload({
'number,number': function () {
return arguments[0] + arguments[1];
},
'number,number,number': function () {
return arguments[0] * arguments[1] * arguments[2];
},
'string,string': function () {
return Number(arguments[0]) + Number(arguments[1]);
},
});