2016-12-13 76 views
0

具有與2種可能的方法的對象,有一種簡單的方法來檢查,如果該方法接受一個參數或不使用純javascript:如何知道函數是否接受參數?

getItems(id) {...}; 
getItems() {...}; 

想檢查方法接受id參數或不?

回答

7

您可以從功能的length財產得到正式的參數(元數)數量:

function zero() { } 
 
function one(a) { } 
 
console.log(zero.length); // 0 
 
console.log(one.length); // 1

在JavaScript中,這是從數量不同參數它實際上是在任何給定的特定場合調用的,你可以從函數中的arguments僞陣列(或ES2015 +,by使用rest參數並獲取其長度)。

說到ES2015的,休息參數不添加到元數,所以:

function stillOne(a, ...rest) { } 
 
console.log(stillOne.length); // 1

同樣,默認參數一個參數不添加到元數,而事實上防止以下任何其他人加入到它(他們認爲有undefined無聲默認):

function oneAgain(a, b = 42) { } 
 
console.log(oneAgain.length); // 1 
 

 
function oneYetAgain(a, b = 42, c) { } 
 
console.log(oneYetAgain.length); // 1

+0

謝謝T.J.克勞德,這解決了我的問題,不知道爲什麼我錯過了已經回答的問題:http://stackoverflow.com/questions/4848149/get-a-functions-arity – emvidi

+0

無後顧之憂 - 高興地刪除這個,所以你可以如果您願意,可以刪除該問題。 (如果您願意,請高興地離開它。) –

+1

我寧願保留它,謝謝 – emvidi