为JavaScript添加重载函数的辅助方法


Posted in Javascript onJuly 04, 2010

JavaScript的重载函数,一般是靠对arguments判断来操作的。
比如:

var afunc = function() { 
args = arguments; 
if(args.length == 1) { 
console.log(1); 
}else if(args.length == 2) { 
console.log(2); 
}else if (args.length == 3) { 
console.log(3); 
} 
}

可以想象如果重载数量多的时候,要有多少的if-else判断啊(事实上重载数量应该不会太多吧)。
如果要对js函数进行重载,代码量肯定是多的。那么能不能想办法使代码清晰点,再减少那些相同代码的书写呢?
这就是我写篇文章和相关代码的起因了。
惯例先上代码:
/** KOverLoad 
一个创建重载函数的辅助方法。 
其实这个方法只是帮忙整理了参数不同的情况下的重载方法。 
如果还要对参数类型进行判断重载的话,请在提供的方法中自己实现。 
@Author ake 2010-05-02 
@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) { 
if(typeof arg == "function") { 
this.list[arg.length] = arg; //以参数数量做标识存储重载方法。很显然如果你的重载方法参数数量 
} 
return this; 
}, 
//添加完所有的重载函数以后,调用该方法来创建重载函数。 
//@param fc<String> 重载函数的方法名。 
load:function(fc) { 
var self = this, args, len; 
this.scope[fc] = function() { //将指定作用域的指定方法 设为重载函数。 
args = Array.prototype.slice.call(arguments, 0); //将参数转换为数组。 
len = args.length; 
if(self.list[len]) { //根据参数数量调用符合的重载方法。 
self.list[len].apply(self.scope, args); //这里指定了作用域和参数。 
}else{ 
throw new Error("undefined overload type"); 
} 
} 
} 
};

使用 方法是我觉得比较清晰的方法:
//这是可选的作用对象。
var s =function(){} 
s.prototype = { 
init:function() { 
console.log(); 
} 
}

//构造函数的参数可以是Object类型的或者其他合法的类型,如果不指定,则注册到window对象中,并且作用域也是window。其实就是添加该重载方法到什么地方而已。
new KOverLoad(s.prototype).add(function(a) { 
console.log("one",a,this) 
}) 
 .add(function(a,b) { 
console.log("two",a,b,this) 
}) 
 .add(function(a,b,c) { 
console.log("three",a,b,c,this) 
}) 
 .add(function(a,b,c,d) { 
console.log("four",a,b,c,d,this) 
}) 
 .load("func"); //在这里的参数就是要创建的重载函数的方法名称。

完成以上操作以后,s.func就是一个重载函数。
我们可以这样调用重载函数:
var t = new s(); 
t.func();//抛出错误异常。因为没有指定零参数时的函数 
t.func(”o”);//one o Object {} 
t.func(1,2);//two 1 2 Object {}

简单的代码而已,如果各位有建议或者意见,欢迎留言指教。
Javascript 相关文章推荐
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
Jul 31 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
Aug 14 Javascript
JavaScript创建对象的写法
Aug 29 Javascript
jquery实现一个简单好用的弹出框
Sep 26 Javascript
详解js跨域原理以及2种解决方案
Dec 09 Javascript
JavaScript的ExtJS框架中表格的编写教程
May 21 Javascript
jQuery实现摸拟alert提示框
May 22 Javascript
对象转换为原始值的实现方法
Jun 06 Javascript
深入理解Javascript中的观察者模式
Feb 20 Javascript
基于Vue和Element-Ui搭建项目的方法
Sep 06 Javascript
js简单实现自动生成表格功能示例
Jun 02 Javascript
如何使JavaScript休眠或等待
Apr 27 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
清空上传控件input file的值
Jul 03 #Javascript
You might like
php面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
PHP的PDO连接讲解
2019/01/24 PHP
Javascript模块模式分析
2008/05/16 Javascript
文本框的字数限制功能jquery插件
2009/11/24 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
学会迭代器设计模式,帮你大幅提升python性能
2021/01/03 Python
Python实现随机爬山算法
2021/01/29 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
西班牙手机之家:Phone House
2018/10/18 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
恒华伟业笔试面试题
2015/02/26 面试题
机电一体化大学生求职信
2013/11/08 职场文书
服装机修工岗位职责
2013/12/26 职场文书
幼师求职信
2014/06/23 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
先进个人申报材料
2014/12/30 职场文书
三行辞职书范文
2015/02/26 职场文书
保险内勤岗位职责
2015/04/13 职场文书
活动总结模板大全
2015/05/11 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书