JavaScript模擬函數重載

在Java等語言裏面實現函數的重載是比較簡單的,參數數量不同就能實現同名函數的重載,而JavaScript中的參數本質上還是arguments這個類數組的引用,不能直接更具參數數量的不同而達到重載,這裏使用的閉包實現函數重載:一層一層去尋找合適的函數去執行,代碼如下:

function setOverload(target, fn) {
    //注意,target只是原函數的引用,修改這個引用不會直接修改原函數,所以return
    var oldTarget = target;
    target = function(){
        if (arguments.length === fn.length) {
            return fn.apply(this, arguments);
        } else {
            //如果參數數量不符,就繼續往原來的函數上去執行
            return oldTarget.apply(this, arguments);
        }
    };
    return target;
}

//測試函數
function method(){
    return "沒找到對應重載";
}

method = setOverload(method, function(a){return a;});
method = setOverload(method, function(a,b){return a+b;});
method = setOverload(method, function(a,b,c){return a+b+c;});

console.log(method(1));//1
console.log(method(1,2));//3
console.log(method(1,2,3));//6
console.log(method(1,2,3,4));//沒找到對應重載


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章