2012-05-13 40 views
1

考慮以下功能:在JavaScript中檢查函數參數的標準方法是什麼?

function interpolate(color1, color2, progress) {}; 

所有參數都必須被傳遞,顏色1和顏色2必須是我的顏色對象的實例和進步必須是一個數字。

檢查類型或簡單地在邏輯中包裝try/catch塊並查看它是否失敗會更快嗎?
如果確實失敗了,我可以檢查所有參數是否存在並且正確,並提出描述性的預期。

+4

圍繞這個函數的邏輯放一個try/catch似乎是爲了尋求麻煩;很難孤立實際存在的問題。所以「它是否更快......」可能是錯誤的問題。從一開始就檢查參數會更容易,也更健壯,除非您確實發現代碼的這部分中存在性能問題,否則您可能不應該擔心速度。 –

+0

我的功能只是一個例子,但它可以用在動畫例程中,每秒調用多次。現在檢查參數類型與插值邏輯的開銷可能可以忽略不計,但我不知道不幸。 – Jules

回答

2

我認爲最好不要依靠try/catch來捕捉不正確的參數,而是快速失敗並進行檢查。

您可以檢查所有參數都通過檢查argumentslength屬性傳遞,你可以看到一個函數簽名多少個參數,通過檢查功能的length財產問題:

function interpolate(color1, color2, progress) { 
    if (arguments.length !== arguments.callee.length) { 
     throw "wrong number of arguments passed"; 
    } 
}; 

現在是a case of checking that color1 and color2 are objects of the type you expectcheck that progress is a number

+1

'arguments.callee'不允許在ES5嚴格的 – Alnitak

+0

好調用,不知道OP是否使用嚴格模式。如果你是''interpolate',請將'arguments.callee'替換爲'interpolate'。 –

+0

因爲這不是一個通用的檢查,我可能只是檢查arguments.length!== 3? – Jules

相關問題