添加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 相关文章推荐
动态创建script标签实现跨域资源访问的方法介绍
Feb 28 Javascript
jquery制作弹窗提示窗口代码分享
Mar 02 Javascript
js 采用delete实现继承示例代码
May 20 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
Dec 16 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 Javascript
javascript流程控制语句集合
Sep 18 Javascript
node前端开发模板引擎Jade的入门
May 11 Javascript
基于vue.js组件实现分页效果
Dec 29 Javascript
vue中各种通信传值方式总结
Feb 14 Javascript
原生JS实现留言板功能
Feb 08 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
Python实现点云投影到平面显示
2020/01/18 Python
python 图像增强算法实现详解
2021/01/24 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
家长写给老师的建议书
2014/03/13 职场文书
药品营销策划方案
2014/06/15 职场文书
学雷锋宣传标语
2014/06/25 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
关于颐和园的导游词
2015/01/30 职场文书
聘任书范文大全
2015/09/21 职场文书
礼仪培训心得体会
2016/01/22 职场文书
如何书写邀请函?
2019/06/24 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
python turtle绘图
2022/05/04 Python