添加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 相关文章推荐
prototype Element学习笔记(Element篇三)
Oct 26 Javascript
js 操作css实现代码
Jun 11 Javascript
通过js动态操作table(新增,删除相关列信息)
May 23 Javascript
javascript动态加载二
Aug 22 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
Aug 17 Javascript
JS基于面向对象实现的拖拽库实例
Sep 24 Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
Dec 18 Javascript
微信小程序绑定手机号获取验证码功能
Oct 22 Javascript
JavaScript实现拖拽盒子效果
Feb 06 Javascript
JavaScript ES6 Class类实现原理详解
May 08 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 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 之Section与Cookie使用总结
2012/09/14 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
Vue实现侧边菜单栏手风琴效果实例代码
2018/05/31 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
vue实现放大镜效果
2020/09/17 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
在Django框架中设置语言偏好的教程
2015/07/27 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
python rsa 加密解密
2017/03/20 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
什么是python的必选参数
2020/06/21 Python
python 星号(*)的多种用途
2020/09/21 Python
Python中的面向接口编程示例详解
2021/01/17 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
上海奥佳笔试题面试题
2016/11/16 面试题
教师求职信范文分享
2013/12/27 职场文书
爱祖国演讲稿
2014/05/04 职场文书
企业形象策划方案
2014/05/29 职场文书
设计专业自荐信
2014/06/19 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书