都知道在js中沒有辦法直接實現方法過載,因為在js中如果定義了多個名稱相同,但引數個數不一樣的方法,其實只有最後乙個方法能被真正呼叫,其他的方法都被覆蓋掉了。
但每乙個函式都有乙個特殊的引數arguments,利用它可以實現方法的過載。
例如:
function add(firstnumber,sencondnumber)
只能處理兩個引數,如果有多個引數,或者沒有引數,乙個引數的情況都是處理不了的。如果沒有傳遞引數,則firstnumber,sencondnumber都是未定義的,如果傳遞了乙個引數,就相當於只給firstnumber賦值了,sencondnumber依然是未定義。相反如果傳遞了多於兩個的引數,則相當於firstnumber,sencondnumber都賦值了,雖然還有其他的引數,但處理時都忽略掉了。如果能獲取其他的引數,自然就可以處理了。此時應該就可以想到函式的特殊引數arguments,這個包含了傳遞給函式的所有引數,利用它就可以實現方法過載的效果。
以上的方法修改如下:
function add(firstnumber,sencondnumber)
else if (arguments.length == 1)
else if(arguments.length == 2)//傳遞的是兩個引數
else
return total;
} }
當然這種方法的弊端就是引數的順序不能打亂,如果函式實現依賴於引數的順序,就必須進行特殊處理,例如傳遞null來佔位。
由於傳遞給函式的引數是嚴格按照定義函式的順序給每乙個引數賦值的,如果只想給第二個引數賦值,則必須傳遞兩個引數,否則實際上傳遞的值賦值給了第乙個引數,並沒有賦值給第二個引數。
例如只想給sencondnumber傳值,但不想給firstnumber傳值,必須這樣呼叫add(null,2)(當然函式內部必須處理傳遞特殊值的情況),如果這樣呼叫add(2),其實是給firstnumber傳值了,相當於呼叫了傳遞了乙個引數的情況。
js中實現過載
js中不支援過載,得使用arguments模擬 arguments是乙個變數,有且僅有乙個屬性length。會以陣列的形式儲存了函式執行過程中傳遞過來的實際引數,即使函式定義沒有那麼多引數。看下邊這個例子 function sayhi name,msg function sayhi name 當想呼...
在JS中如何實現動作
在js中如何實現動作,舉例如下 例如,跳躍的函式底層原始碼 cc.jumpby function duration,position,y,height,jumps example var actionby cc.jumpby 2,cc.p 300,0 50,4 var actionby cc.jum...
JS如何實現過載和多型
可以理解乙個方法被不同實現後 展現不同的效果及狀態。js本身不支援過載,所以只能通過其他方式實現,arguments檢測傳參的個數,然後再執行不同的方式 function add return sum alert add alert add 1 2 alert add 1 2 3 function ...