Осмотрите имена/значения аргументов в определении/выполнении функции JavaScript

Класс UIDevice расскажет вам все, что вам нужно знать об устройстве. Например, свойство model сообщит вам модель устройства. Вы можете использовать это, чтобы определить, какой вид использовать для текущего устройства.

19
задан clemesha 27 May 2009 в 10:14
поделиться

3 ответа

Хотя я не вижу для этого веской причины,

var reg = /\(([\s\S]*?)\)/;
var params = reg.exec(func);
if (params) 
     var param_names = params[1].split(',');

предполагая, что func - это имя вашей функции

24
ответ дан 30 November 2019 в 04:04
поделиться

Вот версия, в которой используются функции высшего порядка. Единственное, что мне не нравится, так это то, что вам нужно указывать параметры как члены массива. Но, по крайней мере, их нужно указать только один раз.

<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var withNamedParams = function(params, lambda) {
    return function() {
        var named = {};
        var max   = arguments.length;

        for (var i=0; i<max; i++) {
            named[params[i]] = arguments[i];
        }

        return lambda(named);
    };
};

var foo = withNamedParams(["a", "b", "c"], function(params) {
    for (var param in params) {
        alert(param + ": " + params[param]);
    }
});

foo(1, 2, 3);
</script>
</head>
<body>

</body>
</html>
0
ответ дан 30 November 2019 в 04:04
поделиться

Значительно улучшенная версия ответа Джонатана Фингланда:

// Utility function to extract arg name-value pairs
function getArgs(args) {
    var argsObj = {};

    var argList = /\(([^)]*)/.exec(args.callee)[1];
    var argCnt = 0;
    var tokens;

    while (tokens = /\s*([^,]+)/g.exec(argList)) {
        argsObj[tokens[1]] = args[argCnt++];
    }

    return argsObj;
}

// Test subject
function add(number1, number2) {
    var args = getArgs(arguments);
    alert(args.toSource()); // ({number1:3,number2:4})
}

// Invoke test subject
add(3, 4);

Примечание. Это работает только в браузерах, поддерживающих arguments.callee .

(Также опубликовано на Как получить имена / значения параметров функции динамически из javascript )

-1
ответ дан 30 November 2019 в 04:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: