Javascript: массив аргументов устарел?
Большинство сайтов говорят, что "вызываемый" как свойство Function.arguments устарела. Но некоторые сайты идут дальше и говорят, что весь Functions.argument устарел, например, http://aptana.com/reference/api/Arguments.html Зачем упоминать вызываемого абонента, если вся рутина мертва в воде? Я только что обнаружил "аргументы", и это кажется невероятно полезным, например: http://hungred.com/how-to/secret-arguments-array-javascript/
5 ответов
Function.arguments
устарела, но устарела только в пользу ванили arguments
объект, который доступен внутри функции. (например, используя x = arguments[i];
вместо x = theFunc.arguments[i];
)
Теперь это предпочтительный (и, как вы говорите, чрезвычайно полезный) метод для доступа к полученным порядковым аргументам.
Насколько мне известно arguments
не рекомендуется как свойство Function. Смотрите эту MDN-ссылку или эту
«Массив аргументов» Javascript — не устарел, но я бы сказал, устарел по состоянию на 2021 год:
Ключевое слово «аргументы» зарезервировано и не может использоваться в качестве имени параметра или в теле функции в качестве локальной переменной. Эта функция была разработана, чтобы разрешить произвольное количество аргументов при вызове функции без необходимости указывать произвольное количество параметров в определении функции. Это также устаревший способ использования нескольких аргументов и менее эффективный, чем современный метод остальных параметров.
Вот пример, показывающий предпочтительную практику:
function eat(...food) {
for (let item in food) {
console.log("eating " + item);
}
// log the rest parameter
console.log(food);
}
eat("eggs", "toast", "bacon");
// => eating eggs
// => eating toast
// => eating bacon
// => [ 'eggs', 'toast', 'bacon' ]
Приведенная выше цитата и пример кода взяты из статьи под названием « Параметры и аргументы JavaScript».
Нет, массив arguments не считается устаревшим в последней версии спецификации 5.1 (см. Стр. 60). caller
Однако объект будет доступен, только если код не находится в строгом режиме.
Callee устарела, но аргументы используются во многих приложениях. Я не знаю, если аргументы устарели. Вы можете использовать его для получения всех параметров функции, даже если они не определены внутри функции ( params).
Большую часть времени я использовал при разработке плагина jQuery. Что-то вроде:
$.fn.tooltip = function( method ) {
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
}
};
Как видите, в качестве параметра передается только метод, но внутри первого, если аргументы разделяются после первого значения. Таким образом, вы можете передать имя функции и все параметры, используемые этой функцией.
Полный пример: http://docs.jquery.com/Plugins/Authoring