添加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验证是否为数字的总结
Apr 14 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
Dec 25 Javascript
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
Js数组排序函数sort()介绍
Jun 08 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
Aug 18 Javascript
基于Jquery实现焦点图淡出淡入效果
Nov 30 Javascript
SpringMVC返回json数据的三种方式
Dec 10 Javascript
JavaScript中Object.prototype.toString方法的原理
Feb 24 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
Oct 16 Javascript
Node.js复制文件的方法示例
Dec 29 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
Apr 01 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项目中比较通用的php自建函数的详解
2013/06/06 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
YII框架关联查询操作示例
2019/04/29 PHP
javascript 模拟点击广告
2010/01/02 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
python正则表达式的使用
2017/06/12 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
Django工程的分层结构详解
2019/07/18 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
应届生高等护理求职信
2013/10/12 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书