一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

為JavaScript添加重載函數(shù)的輔助方法

JavaScript的重載函數(shù),一般是靠對(duì)arguments判斷來(lái)操作的。
比如:
復(fù)制代碼 代碼如下:
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);
}
}

可以想象如果重載數(shù)量多的時(shí)候,要有多少的if-else判斷啊(事實(shí)上重載數(shù)量應(yīng)該不會(huì)太多吧)。
如果要對(duì)js函數(shù)進(jìn)行重載,代碼量肯定是多的。那么能不能想辦法使代碼清晰點(diǎn),再減少那些相同代碼的書寫呢?
這就是我寫篇文章和相關(guān)代碼的起因了。
慣例先上代碼:
復(fù)制代碼 代碼如下:
/** KOverLoad
一個(gè)創(chuàng)建重載函數(shù)的輔助方法。
其實(shí)這個(gè)方法只是幫忙整理了參數(shù)不同的情況下的重載方法。
如果還要對(duì)參數(shù)類型進(jìn)行判斷重載的話,請(qǐng)?jiān)谔峁┑姆椒ㄖ凶约簩?shí)現(xiàn)。
@Author ake 2010-05-02
@weblog http://www.cnblogs.com/akecn
*/
var KOverLoad = function(scope) {
this.scope = scope || window; //默認(rèn)添加方法到這個(gè)對(duì)象中。同時(shí)添加的方法的this指向該對(duì)象。
this.list = {}; //存放重載函數(shù)的地方。
return this;
};
KOverLoad.prototype = {
//添加一個(gè)重載的方法。
//@param arg<Function> 重載的方法。
add:function(arg) {
if(typeof arg == "function") {
this.list[arg.length] = arg; //以參數(shù)數(shù)量做標(biāo)識(shí)存儲(chǔ)重載方法。很顯然如果你的重載方法參數(shù)數(shù)量
}
return this;
},
//添加完所有的重載函數(shù)以后,調(diào)用該方法來(lái)創(chuàng)建重載函數(shù)。
//@param fc<String> 重載函數(shù)的方法名。
load:function(fc) {
var self = this, args, len;
this.scope[fc] = function() { //將指定作用域的指定方法 設(shè)為重載函數(shù)。
args = Array.prototype.slice.call(arguments, 0); //將參數(shù)轉(zhuǎn)換為數(shù)組。
len = args.length;
if(self.list[len]) { //根據(jù)參數(shù)數(shù)量調(diào)用符合的重載方法。
self.list[len].apply(self.scope, args); //這里指定了作用域和參數(shù)。
}else{
throw new Error("undefined overload type");
}
}
}
};

使用 方法是我覺(jué)得比較清晰的方法:
//這是可選的作用對(duì)象。
復(fù)制代碼 代碼如下:
var s =function(){}
s.prototype = {
init:function() {
console.log();
}
}

//構(gòu)造函數(shù)的參數(shù)可以是Object類型的或者其他合法的類型,如果不指定,則注冊(cè)到window對(duì)象中,并且作用域也是window。其實(shí)就是添加該重載方法到什么地方而已。
復(fù)制代碼 代碼如下:
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"); //在這里的參數(shù)就是要?jiǎng)?chuàng)建的重載函數(shù)的方法名稱。

完成以上操作以后,s.func就是一個(gè)重載函數(shù)。
我們可以這樣調(diào)用重載函數(shù):
復(fù)制代碼 代碼如下:
var t = new s();
t.func();//拋出錯(cuò)誤異常。因?yàn)闆](méi)有指定零參數(shù)時(shí)的函數(shù)
t.func(”o”);//one o Object {}
t.func(1,2);//two 1 2 Object {}

簡(jiǎn)單的代碼而已,如果各位有建議或者意見(jiàn),歡迎留言指教。

JavaScript技術(shù)為JavaScript添加重載函數(shù)的輔助方法,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久综合丝袜长腿丝袜 | 国产福利视精品永久免费 | 六月激情 | 韩国午夜理伦三级2020宅男 | 影音先锋色偷偷米奇四色 | 亚洲二区在线 | 五月婷久久 | 精品伊人| 91精品91久久久 | 97麻豆精品国产自产在线观看 | 亚洲午夜久久久久国产 | 久久精品国产一区二区三区肥胖 | 欧美一卡2卡3卡4卡无卡网老狼 | 四虎精品免费视频 | 日本老年人精品久久中文字幕 | 福利视频一区青娱 | 国产午夜毛片 | 色老板成人永久免费视频 | 久久久噜久噜久久gif动图 | 国产麻豆精品视频 | 国产视频一区二区在线观看 | 亚洲最大福利网站 | 欧美午夜性 | 美女网站色视频 | 国产精品区网红主播在线观看 | 久久成人免费视频 | 在线小视频国产 | www.成人在线视频 | 国产一二三区在线观看 | 欧洲成人在线观看 | 中文字幕亚洲一区婷婷 | 国产精品天天看特色大片不卡 | 欧美三级视频在线观看 | 精品久久久久久久久久中文字幕 | 免费99视频有精品视频高清 | 国内自拍视频在线看免费观看 | 国产精品99精品久久免费 | 一级a性色生活片久久毛片 一级爱爱片一级毛片-一毛 | 欧美成人tv | 中文字幕日本精品一区二区三区 | 黄视频大全 |