四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

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

JavaScript的重載函數(shù),一般是靠對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);
}
}

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

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

//構造函數(shù)的參數(shù)可以是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"); //在這里的參數(shù)就是要創(chuàng)建的重載函數(shù)的方法名稱。

完成以上操作以后,s.func就是一個重載函數(shù)。
我們可以這樣調用重載函數(shù):
復制代碼 代碼如下:
var t = new s();
t.func();//拋出錯誤異常。因為沒有指定零參數(shù)時的函數(shù)
t.func(”o”);//one o Object {}
t.func(1,2);//two 1 2 Object {}

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

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

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

主站蜘蛛池模板: 浙江卫视在几台| 大杳蕉狼人欧美全部| 电影《kiskisan》在线播放| 痴汉电车排名前十番号| tvb翡翠台直播| 公民的基本权利和义务教学设计| 电视剧《后浪》| 罗斯福游戏| 买下我完整版电影免费观看| 艳妇乳肉豪妇荡乳xxx| 卡特琳娜·格兰厄姆| 爱很简单简谱| 山本裕典| 太太的情人电影| 远景山谷1981美国电影在线观看| 二年级上册期末真题卷| 欧美gv网站| 重口味sm| 电视剧《繁华》免费观看全集| 布袋电影| 草船借箭剧本| 赵汉善| 杨贵妃黄色片| 白世莉| 免费头像图片女生| 心奇爆龙| 云月之恋简谱| 泷泽萝拉第二部| 毒鲨| 《父亲的爱》阅读理解答案| 黄网站在线观看| 列维| 免费看污污的视频| 国产调教视频丨vk| 爱情最美丽 电视剧| 《灿烂的季节》大结局| 新目标大学英语综合教程2答案| 瓶邪图片| 电影土耳其狂欢| 我自己说了算作文| 黄金比例身材|