2014-01-24 44 views
3

看到這個代碼:如何獲取存儲在變量中的函數的參數名稱?

var method = function(service,worker){ 
    //.... 
} 

function getArguments(method){ 

    //what I want is: 
    //print " the arguments of the method is 'service','worker'" 
} 

getArguments(method); 

我怎樣才能從變量參數的名字呢?

我知道method.arguments在該方法未被調用時將不起作用。

回答

8

您可以在該函數上調用toString,然後使用正則表達式從函數定義中提取參數列表。這裏有一個簡單的例子:

function getArguments(method){ 
    // strip off comments 
    var methodStr = method.toString().replace(/\/\*.*?\*\/|\/\/.*?\n/g, ''); 
    var argStr = methodStr.match(/\(([^)]*)\)/); 
    alert(argStr[1].split(/\s*,\s*/g)); 
} 

Demonstration

+1

如果你在問題中的示例代碼的註釋仔細一看,它看起來像他/她真正想要的參數名稱的數組。 – Sam

+0

這是有保證的行爲,還是特定於ES的實施? – Sam

+1

@Sam'argStr [1] .match(/ [$ \ w] +/g)'會產生一個參數名稱數組(儘管它承認它不會處理Unicode標識符,如'ಠ_ಠ')。我相信'mothod.toString()'返回的字符串的精確格式可能會有所不同,但它返回函數定義的事實是ECMAScript標準的一部分。 –

相關問題