添加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 相关文章推荐
关于Jqzoom的使用心得 jquery放大镜效果插件
Apr 12 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
Feb 10 Javascript
js函数调用常用方法详解
Dec 03 Javascript
通过正则表达式获取url中参数的简单实现
Jun 07 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
js无提示关闭浏览器窗口的两种方法分析
Nov 06 Javascript
非常优秀的JS图片轮播插件Swiper的用法
Jan 03 Javascript
jQuery中DOM节点的删除方法总结(超全面)
Jan 22 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
Sep 15 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
Sep 30 Javascript
通过GASP让vue实现动态效果实例代码详解
Nov 24 Javascript
JavaScript快速调试的两个技巧
Nov 04 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实现大数(浮点数)取余的方法
2017/02/18 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
javascript new一个对象的实质
2010/01/07 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
js中的面向对象入门
2017/03/06 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Python 面试中 8 个必考问题
2018/11/16 Python
python爬取内容存入Excel实例
2019/02/20 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
解决python flask中config配置管理的问题
2019/07/26 Python
Python爬虫解析网页的4种方式实例及原理解析
2019/12/30 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
使用npy转image图像并保存的实例
2020/07/01 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
婚前协议书
2014/04/15 职场文书
精神文明单位申报材料
2014/05/02 职场文书
营销总监岗位职责
2014/09/16 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
会议主持词通用版
2019/04/02 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
基于Go语言构建RESTful API服务
2021/07/25 Golang