JavaScript 函数重载

// 方法一:根据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]);
},
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值