Dla wygody użytkownika, mam funkcję, która najpierw otrzymuje opcjonalny argument, przed wymaganym argumentem. Na przykład:Opcjonalny argument pierwszy w JavaScript
ns.myFunction('optional arg', function(){
//the required callback
});
Robię to raczej niż w następujący sposób ponieważ organizm zwrotna może być długie, a użytkownik może zapomnieć, aby zastąpić ustawienia domyślne dla opcjonalnych argumentów:
ns.myFunction(function(){
//the required callback
}, 'optional arg');
Obecnie robię to, by sprawdzić:
function myFunction(first, second) {
//if second is undefined and first is a function
if (typeof second === 'undefined' && typeof first === 'function') {
second = first;
}
}
pytania
- Czy to właściwa droga?
- Jak to zrobić, aby skalować, zwłaszcza jeśli wystąpiło N opcjonalnych argumentów, które są przed wymaganym argumentem?
Dlaczego nie umieścić opcjonalnych argumentów na * końcu * listy argumentów? To jest bardziej użyteczne w JavaScript ze względu na semantykę '.bind()'. Bardziej "stabilne" argumenty powinny być na pierwszym miejscu, a te, które są bardziej prawdopodobne, mogą się różnić lub być nieobecne na końcu. – Pointy
@Pointy Po prostu ciekawi mnie, jak biblioteki to robią i czy istnieje odpowiednia metoda. Na przykład, 'extend' jQuery ma flagę deepcopy, która jest opcjonalna umieszczona na pierwszej liście argumentów. – Joseph
Co powiesz na użycie 'arguments [..]'? Czy iteracja przez tablicę i zatrzymanie się przy pierwszych argumentach typu [i] === 'function'' help? – SuperSaiyan