最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2010年07月04日 19:37:11   作者:  
大家都習慣了重載帶來的便利。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ù)進行重載,代碼量肯定是多的。那么能不能想辦法使代碼清晰點,再減少那些相同代碼的書寫呢?
這就是我寫篇文章和相關(guān)代碼的起因了。
慣例先上代碼:
復制代碼 代碼如下:

/** 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ù)以后,調(diào)用該方法來創(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");
}
}
}
};

使用 方法是我覺得比較清晰的方法:
//這是可選的作用對象。
復制代碼 代碼如下:

var s =function(){}
s.prototype = {
init:function() {
console.log();
}
}

//構(gòu)造函數(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ù)。
我們可以這樣調(diào)用重載函數(shù):
復制代碼 代碼如下:

var t = new s();
t.func();//拋出錯誤異常。因為沒有指定零參數(shù)時的函數(shù)
t.func(”o”);//one o Object {}
t.func(1,2);//two 1 2 Object {}

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

相關(guān)文章

  • layui默認選中table的CheckBox復選框方法

    layui默認選中table的CheckBox復選框方法

    今天小編就為大家分享一篇layui默認選中table的CheckBox復選框方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 微信小程序?qū)崿F(xiàn)登陸注冊滑塊驗證

    微信小程序?qū)崿F(xiàn)登陸注冊滑塊驗證

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)登陸注冊滑塊驗證,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • uniapp中刷新本頁面的三種方法

    uniapp中刷新本頁面的三種方法

    這篇文章主要給大家介紹了關(guān)于uniapp中刷新本頁面的三種方法,刷新頁面的具體邏輯可以根據(jù)實際需求進行編寫,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • JavaScript實現(xiàn)圖片上傳并預覽并提交ajax

    JavaScript實現(xiàn)圖片上傳并預覽并提交ajax

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)圖片上傳并預覽并提交ajax,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • JavaScript中object和Object的區(qū)別(詳解)

    JavaScript中object和Object的區(qū)別(詳解)

    下面小編就為大家?guī)硪黄狫avaScript中object和Object的區(qū)別(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 微信小程序版本自動更新的方法

    微信小程序版本自動更新的方法

    這篇文章主要介紹了微信小程序版本自動更新的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • JS中利用swiper實現(xiàn)3d翻轉(zhuǎn)幻燈片實例代碼

    JS中利用swiper實現(xiàn)3d翻轉(zhuǎn)幻燈片實例代碼

    大家都知道Swiper(Swiper master)是目前應用較廣泛的移動端網(wǎng)頁觸摸內(nèi)容滑動js插件。下面這篇文章主要給大家介紹了在JS中利用swiper實現(xiàn)3d翻轉(zhuǎn)幻燈片的相關(guān)資料,文中給出了完整的示例代碼供大家參考學習,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • ES2020系列之空值合并運算符 ''??''

    ES2020系列之空值合并運算符 ''??''

    這篇文章主要介紹了ES2020系列之空值合并運算符 '??',文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 實用又漂亮的BootstrapValidator表單驗證插件

    實用又漂亮的BootstrapValidator表單驗證插件

    這篇文章主要為大家詳細介紹了好用又漂亮的BootstrapValidator表單驗證插件,感興趣的小伙伴們可以參考一下
    2016-05-05
  • JavaScript各類型的關(guān)系圖解

    JavaScript各類型的關(guān)系圖解

    這篇文章主要通過一張圖讓你看懂JavaScript各類型的關(guān)系,需要的朋友可以參考下
    2015-10-10

最新評論

通海县| 彩票| 越西县| 安康市| 锡林郭勒盟| 开远市| 耒阳市| 广宗县| 勐海县| 肥西县| 前郭尔| 宿松县| 类乌齐县| 勐海县| 廊坊市| 雷波县| 吐鲁番市| 崇左市| 彭阳县| 金华市| 五家渠市| 宣化县| 锦州市| 穆棱市| 亳州市| 余江县| 宜宾县| 嘉黎县| 兴仁县| 乐亭县| 乌审旗| 五原县| 峨山| 广宗县| 依安县| 宜兴市| 宁国市| 崇礼县| 汽车| 称多县| 武功县|