Использование объекта имеет несколько преимуществ:
1. Код более читабелен
Рассмотрим следующие два вызова:
kick({user: u,
reason: "flood",
log: true,
rejoin: false,
timeout: 60000,
privmessage: true});
kick(u, "flood", true, false, 60000, true);
и представьте, что кто-то еще читает звонок. Какой первый true
? Также обратите внимание, что через несколько месяцев вы будете в том же положении (не , помня , что является четвертым параметром для kick
, очень похоже на то, что вы его не знаете).
2. Вы можете туннелировать параметры
При объектном подходе вы можете передать функции набор параметров, которые эта функция должна использовать для вызова другой функции
function kickgroup(users, parms) {
for (var i=0; i<users.lenght; i++) {
var uparms = Object.create(parms);
uparms.user = users[i];
kick(uparms);
}
}
Обратите внимание, что в случае arguments
вам не нужно наказывать себя, используя синтаксис arguments[x]
. Вы можете просто объявить параметры и добавить их по мере развития функции: любой параметр, который не был передан, будет установлен на undefined
(и, если вам нужно, вы все равно можете получить доступ к arguments.length
, чтобы определить, передал ли вызывающий явно вашу функцию undefined
).