2014-01-24 2 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. –

Смежные вопросы