2016-11-10 87 views
2

例如,如果我已經定義了這樣的功能:如何檢查參數是否在JavaScript中的函數定義中定義?

function set_name(name) { 
    return name; 
} 

但我這樣調用它(因個人原因這樣):

set_name.apply(this, ['Duvdevan', 'Omerowitz']); 

什麼將是檢查的最佳實踐和阻止set_name函數的進一步執行,如果它接受了多於1參數/參數?

而且,我必須指出,我試圖找出一種方法來檢查這個之前,我打電話.apply功能:

function set_name(name) { 
    // if(arguments.length > 1) console.log('This is not what I need though.'); 

    return name; 
} 

var args = ['Duvdevan', 'Omerowitz']; 

// Now, at this point I'd like to check if the set_name function can accept two arguments. 
// If not, I'd console.log or return new Error here. 

set_name.apply(this, args); 

這是可行的?

+0

所以,如果它有多個參數,你想讓它不跑?只有這樣,如果你喜歡你編碼它... – epascarello

回答

3

您可以通過Function.length得到的函數預期參數個數:

function set_name(name) { 
 
    return name; 
 
} 
 

 
var args = ['Duvdevan', 'Omerowitz']; 
 

 
console.log(set_name.length);   // 1 
 

 
if (args.length > set_name.length) { 
 
    throw new Error('Too many values'); // throws 
 
} 
 

 
set_name.apply(this, args);   // not executed

+0

該死的真棒!實際上,我擔心我必須執行'set_name.toString()'並解析已定義參數的實際函數定義......但是,您是JavaScript Gandalf!謝謝! – omerowitz

相關問題