添加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 相关文章推荐
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
May 23 Javascript
js事件监听器用法实例详解
Jun 01 Javascript
非常漂亮的相册集 使用jquery制作相册集
Apr 28 Javascript
jQuery Mobile动态刷新页面样式的实现方法
May 28 Javascript
ES6新特性之Object的变化分析
Mar 31 Javascript
jQuery Plupload上传插件的使用
Apr 19 jQuery
AngularJS实现自定义指令与控制器数据交互的方法示例
Jun 19 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
Sep 02 Javascript
你点的 ES6一些小技巧,请查收
Apr 25 Javascript
JS实现查找数组中对象的属性值是否存在示例
May 24 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
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
php利用array_search与array_column实现二维数组查找
2019/07/08 PHP
Javascript 对象的解释
2008/11/24 Javascript
JavaScript 学习初步 入门教程
2010/03/25 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
JS随机密码生成算法
2019/09/23 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
给国外客户的邀请函
2014/01/30 职场文书
成语的广告词
2014/03/19 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
研究生个人学年总结
2015/02/14 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python