代码依然简单。所以依然没什么好解释的。。
复制代码 代码如下:
/** 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");
复制代码 代码如下:
/** 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,重载函数
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“添加JavaScript重载函数的辅助方法2”评论...
更新动态
2024年11月15日
2024年11月15日
- 永恒英文金曲精选4《TheBestOfEverlastingFavouritesVol.4》[WAV+CUE]
- 群星《国风超有戏 第9期》[320K/MP3][13.63MB]
- 群星《国风超有戏 第9期》[FLAC/分轨][72.56MB]
- P1X3L《P1X3L》[320K/MP3][143MB]
- 群星.2022-良辰好景知几何电视剧原声带【SONY】【FLAC分轨】
- 庾澄庆.1991-管不住自己【福茂】【WAV+CUE】
- 欧倩怡.2001-Cindy(EP)【华星】【WAV+CUE】
- P1X3L《P1X3L》[FLAC/分轨][791.28MB]
- 茵达INDAHKUS《茵 the Blue》[320K/MP3][33.49MB]
- 茵达INDAHKUS《茵 the Blue》[FLAC/分轨][147.57MB]
- 老虎鱼AnneClarkwithUllavanDaelenJustinCiuche-Borderland-HiRes-Files24bit88.2kHz
- 江玲2004-百合盛开2CD[歌林][WAV+CUE]
- 孙露《怕什么孤单3CD》深圳音像[WAV分轨]
- s14全球总决赛目前是什么结果 s14全球总决赛赛程结果图一览
- s2TPA夺冠五人名单都有谁 tpa战队s2夺冠队员名单一览