添加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 相关文章推荐
js substring从右边获取指定长度字符串(示例代码)
Dec 23 Javascript
jquery默认校验规则整理
Mar 24 Javascript
实例详解JavaScript获取链接参数的方法
Jan 01 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
May 23 Javascript
javaScript+turn.js实现图书翻页效果实例代码
Feb 16 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
webpack实现热更新(实施同步刷新)
Jul 28 Javascript
基于jquery的on和click的区别详解
Jan 15 jQuery
浅谈关于vue中scss公用的解决方案
Dec 02 Javascript
详解jQuery中的prop()使用方法
Jan 05 jQuery
js 使用ajax设置和获取自定义header信息的方法小结
Mar 12 Javascript
JavaScript ES 模块的使用
Nov 12 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
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
node.js使用express框架进行文件上传详解
2019/03/03 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
Python采用Django制作简易的知乎日报API
2016/08/03 Python
python2.7读取文件夹下所有文件名称及内容的方法
2018/02/24 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
详解Python的三种可变参数
2019/05/08 Python
使用python实现滑动验证码功能
2019/08/05 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
自我鉴定范文300字
2013/10/01 职场文书
大学四年规划书范文
2013/12/27 职场文书
大学生村官演讲稿
2014/04/25 职场文书
安全口号大全
2014/06/21 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
社区文艺活动方案
2014/08/19 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
Python中的嵌套循环详情
2022/03/23 Python