@Extramezz

Как правильно реализовать несколько аргументов?

Есть функция:
function myFunc(event, target, banned, handler){}

Не важно, что она делает и где она есть, важно, что она может быть вызвана с "пропуском" некоторых аргументов, к примеру:
myFunc(event, handler);
//Или
myFunc(event, target, handler);
//Или
myFunc(event, target, banned, handler);


Как проверку аргументов внутри функции лучше реализовать?
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
@GreatRash
Да просто в качестве аргумента передавать объект со всеми параметрами. От такого подхода сплошные плюсы, начиная с того, что пофиг в каком порядке будут стоять свойства объекта, и, заканчивая тем, что можно указывать совершенно произвольное количество этих самых свойств.

function foo(params) {
  if (params.hasOwnProperty(prop)) {
    // ...
  }
}

foo({
  prop: value,
  prop_1: value,
  prop_3: value,
  prop_2: value
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
https://jsfiddle.net/QW01_01/0pbufyek/
function myFunc(event, target, banned, handler){
	var arglen = arguments.length;
    var handler = arglen > 1 ? arguments[arglen-1] : undefined;
    var banned = arglen > 3 ? arguments[2] : undefined;
    var target = arglen > 2 ? arguments[1] : undefined;
    
    console.log({
    	event:event,
        target:target,
        banned:banned,
        handler:handler
    });
}

myFunc('event', 'handler');

myFunc('event', 'target', 'handler');

myFunc('event', 'target', 'banned', 'handler');
Ответ написан
Комментировать
@asdz
Вместо пропускаемых аргументов можно передавать в функцию undefined, соответсвенно, сможете проверить наличие того или иного аргумента. Для установки значения по умолчанию можно использовать ||. Второй способ - передача объекта со свойствами. Установку значений по умолчанию, можно выполнить с помощью jQuery.extend:
arg= $.extend({}, default_arg, arguments);
Ответ написан
Lynn
@Lynn
nginx, js, css
В описанном вами примере можно смотреть на количество аргументов.
function myFunc(event, target, banned, handler) {
  if (arguments.length == 2) {
    handler = target;
    target = undefined;
  }
 if (arguments.length == 3) {
    handler = banned;
    banned = undefined;
  }
  ...
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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