JavaScript 函数重载
2015-07-17 23:58
686 查看
// 方法一:根据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]);
},
});
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 异步流程控制:7 行代码学会 co 模块
- JavaScript拆分字符串时产生空字符的原因
- IE8开发人员工具教程(二)
- 在flex中执行一个javascript方法的简单方式
- Flex结合JavaScript读取本地路径的方法
- PowerShell中执行Javascript的方法示例
- javascript asp教程第六课-- response方法
- javascript asp教程More About Recordsets
- javascript asp教程第十二课---session对象
- javascript asp教程创建数据库连接
- javascript asp教程错误处理
- javascript asp教程第十课--global asa