Класс UIDevice расскажет вам все, что вам нужно знать об устройстве. Например, свойство model сообщит вам модель устройства. Вы можете использовать это, чтобы определить, какой вид использовать для текущего устройства.
Хотя я не вижу для этого веской причины,
var reg = /\(([\s\S]*?)\)/;
var params = reg.exec(func);
if (params)
var param_names = params[1].split(',');
предполагая, что func
- это имя вашей функции
Вот версия, в которой используются функции высшего порядка. Единственное, что мне не нравится, так это то, что вам нужно указывать параметры как члены массива. Но, по крайней мере, их нужно указать только один раз.
<!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>
Значительно улучшенная версия ответа Джонатана Фингланда:
// 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 )