添加JavaScript重载函数的辅助方法2


Posted in Javascript onJuly 04, 2010

代码依然简单。所以依然没什么好解释的。。

/** KOverLoad 
一个创建重载函数的辅助方法。 
补充上次的函数。 
@Author ake 2010-07-03 
@weblog http://www.cnblogs.com/akecn 
*/ 
var KOverLoad = function(scope) { 
this.scope = scope || window; //默认添加方法到这个对象中。同时添加的方法的this指向该对象。 
this.list = {}; //存放重载函数的地方。 
return this; 
}; 
KOverLoad.prototype = { 
//添加一个重载的方法。 
//@param arg<Function> 重载的方法。 
add:function(arg, types) { 
if(typeof arg == "function") { 
var types = (types || []).join(","); 
this.list[arg.length + types] = arg; //以参数数量和类型做标识存储重载方法。很显然如果你的重载方法参数数量 
return this; 
} 
}, 
checkTypes: function(types) { 
var type = []; 
//console.log(typeof type); []方式创建的数组,其typeof类型为object 
//如果需要判断类型的话 还是用Object.prototype.toString.call(type) == "[object Array]"来判断吧。 
for(var i=0, it; it = types[i++];) { 
type.push(typeof it); 
} 
return type.join(","); 
}, 
//添加完所有的重载函数以后,调用该方法来创建重载函数。 
//@param fc<String> 重载函数的方法名。 
load:function(fc) { 
var self = this, args, len, types; 
this.scope[fc] = function() { //将指定作用域的指定方法 设为重载函数。 
args = Array.prototype.slice.call(arguments); //将参数转换为数组。 
len = args.length; 
types = self.checkTypes(args); 
//console.log(self.list); 
if(self.list[len + types]) { //根据参数数量调用符合的重载方法。 
self.list[len + types].apply(self.scope, args); //这里指定了作用域和参数。 
}else if(self.list[len]){ 
self.list[len].apply(self.scope, args) 
}else { 
throw new Error("undefined overload type"); 
} 
} 
} 
};

下面是示例:
var s = {}; 
new KOverLoad(s) //设置方法绑定的位置。命名空间? 
.add(function(a) { 
console.log("one",a,this) 
},["string"]) 
.add(function(a,b) { 
console.log("two",a,b,this) 
},["string","string"]) 
.add(function(a,b,c) { 
console.log("three",a,b,c,this) 
},["string", "number", "string"]) 
.add(function(a,b,c,d) { 
console.log("four",a,b,c,d,this) 
}) 
.load("func"); //在这里的参数就是要创建的重载函数的方法名称。 
s.func("a","b");
Javascript 相关文章推荐
JavaScript实现快速排序(自已编写)
Dec 19 Javascript
js编写trim()函数及正则表达式的运用
Oct 24 Javascript
iframe里使用JavaScript控制主页转向的方法
Apr 03 Javascript
js实现Form栏显示全格式时间时钟效果代码
Aug 19 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
Jun 07 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
Aug 15 Javascript
使用JS实现图片展示瀑布流效果的实例代码
Sep 12 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
May 13 jQuery
node+express框架中连接使用mysql(经验总结)
Nov 10 Javascript
JS实现返回上一页并刷新页面的方法分析
Jul 16 Javascript
浅析VUE防抖与节流
Nov 24 Vue.js
为JavaScript添加重载函数的辅助方法
Jul 04 #Javascript
location.href语句与火狐不兼容的问题
Jul 04 #Javascript
JQuery从头学起第二讲
Jul 04 #Javascript
JQuery从头学起第一讲
Jul 04 #Javascript
js弹窗代码 可以指定弹出间隔
Jul 03 #Javascript
动态载入/删除/更新外部 JavaScript/Css 文件的代码
Jul 03 #Javascript
一个原生的用户等级的进度条
Jul 03 #Javascript
You might like
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
深入理解PHP中的count函数
2016/05/31 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python 随机森林算法及其优化详解
2019/07/11 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
社会稳定风险评估方案
2014/06/02 职场文书
中韩经贸翻译专业大学生职业生涯规划范文
2014/09/18 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
暑期实践个人总结
2015/03/06 职场文书
公司岗位说明书
2015/10/08 职场文书
Python可视化学习之seaborn调色盘
2022/02/24 Python