Задать вопрос
@v_m_smith
лучше бы я пил и курил

Как обратиться к параметрам функции как к объекту, по аналогии с arguments?

Насколько я понял, в arguments не попадают параметры, для которых не переданны аргументы. А есть какой-то объект наподобие arguments, но для параметров, включая те, которые не переданы?

function params(
         a = '19000101'  
        ,b = '19000101'  
){ 
    console.log( arguments[1] ); //undefined
    console.log(typeof arguments[0]); //string
    console.log(typeof arguments[1]); //undefined
    return [ ...arguments ] 
}

console.log( params('20150101')[0], params('20150101')[1] ); //20150101 undefined
  • Вопрос задан
  • 209 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
search
@search
мама говорит что я особенный
В ES6 появились параметры по умолчанию.

Можно написать

function doSomething(a='test', b=1, c=true) {
}


И если не передавать в doSomething() эти переменные примут значения по умолчанию.

Вообще обычно когда появляется необходимость в сабже, то просто делают функцию, которая принимает объект с парами ключ-значение, а недостающие в объекте значение дополняет значениями по умолчанию.

Как-то так:
function doSomething(options) {
  var defaultOptions = { validate: false, limit: 5, name: "foo" };
  options = $.extend({}, defaultOptions, options || {}); // Дополняем options значениями по умолчанию
}


Но если уж прям не терпится получить все параметры из любой функции, то у любой JS функции есть метод toString(), который возвращает код самой функции в виде строки. Это недокументированная особенность, поддерживаемая всеми браузерами. Для эксперимента можете запустить этот код в консоли чтоб видеть наглядно.

var a = function(a,b,c) {var someCodeInside = true;};
console.log(a.toString());


Можете взять полученную в результате toString() строку и выудить из неё аргументы.

Именно по такому принципу работает Dependency Injection в первом ангуляре.

Вот тут есть примеры кода по вытягиванию параметров из функций https://stackoverflow.com/questions/1007981/how-to...
Ответ написан
Комментировать
twobomb
@twobomb
Нету и не понимаю зачем это нужно.
Ответ написан
Комментировать
devellopah
@devellopah
никак. это и не нужно. объект arguments и параметры функции никак не связаны. по сути параметры - это синтаксическая добавка(то есть в них нет принципиальной необходимости), чтобы тупо было удобнее...
вместо
function sum () {
	return arguments[0] + arguments[1];
}


писать так
function sum (x, y) {
	return x + y;
}


Позволь поинтересоваться зачем тебе такой объект?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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