添加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 错误处理与调试经验总结
Aug 10 Javascript
鼠标右击事件代码(asp.net后台)
Jan 27 Javascript
JavaScript获取图片真实大小代码实例
Sep 24 Javascript
Javascript原型链和原型的一个误区
Oct 22 Javascript
分享10个原生JavaScript技巧
Apr 20 Javascript
jQuery实现为控件添加水印文字效果(附源码)
Dec 02 Javascript
jquery遍历json对象集合详解
May 18 Javascript
JavaScript插件Tab选项卡效果
Nov 14 Javascript
Vue中的$set的使用实例代码
Oct 08 Javascript
JavaScript两种计时器的实例讲解
Jan 31 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
Sep 21 Javascript
js实现全选和全不选功能
Jul 28 Javascript
为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不写闭合标签的好处
2014/03/04 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
激活 ActiveX 控件
2006/10/09 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
Python fileinput模块使用实例
2015/06/03 Python
Python计算字符宽度的方法
2016/06/14 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
Python协程的用法和例子详解
2017/09/09 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
python得到电脑的开机时间方法
2018/10/15 Python
浅析python参数的知识点
2018/12/10 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
实习生的自我评价
2014/01/08 职场文书
触摸春天教学反思
2014/02/03 职场文书
会计毕业生自荐书
2014/06/12 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
个人向公司借款协议书
2014/10/09 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
销售助理岗位职责
2015/02/11 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
Vue的生命周期一起来看看
2022/02/24 Vue.js
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js