添加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 相关文章推荐
用正则xmlHttp实现的偷(转)
Jan 22 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
Jun 19 Javascript
JavaScript 图像动画的小demo
May 23 Javascript
JS中表单的使用小结
Jan 11 Javascript
jQuery通过Ajax返回JSON数据
Apr 28 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
May 03 Javascript
jQuery构造函数init参数分析
May 13 Javascript
Javascript中神奇的this
Jan 20 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
Jun 12 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
webpack4 处理CSS的方法示例
Sep 03 Javascript
Vue.js实现大屏数字滚动翻转效果
Nov 29 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制作的中文拼音首字母工具类
2014/12/11 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
js jquery数组介绍
2012/07/15 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
2013/11/21 Javascript
javascript 动态创建表格
2015/01/08 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
Python smallseg分词用法实例分析
2015/05/28 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
python range实例用法分享
2020/02/06 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
如何用python批量调整视频声音
2020/12/22 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
项目合作计划书
2014/01/09 职场文书
工作过失检讨书
2014/02/23 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
机关作风建设自查报告
2014/10/22 职场文书
小学数学教学反思范文
2016/02/16 职场文书