添加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操作userdata
Apr 27 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
Dec 08 Javascript
JavaScript返回网页中超链接数量的方法
Apr 03 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
深入浅析javascript立即执行函数
Oct 23 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
使用Web Uploader实现多文件上传
Jun 08 Javascript
js实现前面自动补全位数的方法
Oct 10 Javascript
更优雅的微信小程序骨架屏实现详解
Aug 07 Javascript
React学习之受控组件与数据共享实例分析
Jan 06 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
May 19 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
Aug 03 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 远程图片保存到本地的函数类
2008/12/08 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
js Math 对象的方法
2013/09/01 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
jquery mobile界面数据刷新的实现方法
2016/05/28 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
Python中的map、reduce和filter浅析
2014/04/26 Python
跟老齐学Python之Python安装
2014/09/12 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
调用其他python脚本文件里面的类和方法过程解析
2019/11/15 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
学前班幼儿评语大全
2014/12/29 职场文书
设备技术员岗位职责
2015/04/11 职场文书