La domanda riguarda una lingua che supporta l'overloading (la prima) e un'altra che non lo supporta (JavaScript). Ciò renderà una risposta succinta più difficile.
JavaScript non fa sovraccarico. Non solo non sovraccarico ma non ha parametri digitati! Inoltre non esegue valori restituiti digitati! Una funzione può restituire nulla o qualcosa, in modo dinamico, come meglio ritiene opportuno. Non esiste praticamente alcuna gestione del tempo di compilazione del conteggio dei parametri, dei tipi di parametro e del tipo di ritorno.
(TypeScript e / o altro aggiunge sopra JavaScript, per ottenere i vantaggi di un sistema di tipi statici, in modo che gli errori di battitura possano essere rilevati in fase di compilazione anziché tramite debug.)
In JavaScript possiamo controllare dinamicamente il numero di parametri passati e / o controllare i tipi dinamici dei parametri, e / o vedere se è stato passato o meno un parametro opzionale. E possiamo cambiare il comportamento in un modo o nell'altro basandoci su quello.
the popular JavaScript library jQuery has many functions that do different things based on how many arguments they are passed
Questo meccanismo qui è parametri opzionali e valori di ritorno opzionali, ei programmatori stanno variando il comportamento in base alla presenza o assenza di parametri opzionali. Potremmo chiamarlo polimorfismo sciatto se abbiamo bisogno di un nome formale per questo. (Non sono necessariamente gli autori di jQuery a essere trascurati, ma questo linguaggio offre parametri opzionali e un valore di ritorno opzionale come un sostituto per l'overload.)
Questo non funzionerebbe in altri linguaggi: in generale funzioni devono restituire valori e procedure non possono (anche senza funzioni o metodi) - non possiamo cambiarlo dinamicamente. Poiché il valore di ritorno è stato digitato, non è possibile utilizzare un parametro facoltativo per modificare la natura del metodo (dalla funzione alla procedura).
Inoltre in altre lingue, i parametri facoltativi vengono passati come valore predefinito, che a volte non può essere distinto dal non essere stato passato.
Tuttavia, in alcuni di questi linguaggi è supportato il sovraccarico e quindi possono coesistere funzioni con lo stesso nome e conteggio o tipi diversi di parametri. Questi linguaggi tipicamente eseguono la selezione in fase di compilazione (binding) del sovraccarico appropriato da richiamare, che è chiamato polimorfismo ad-hoc. Penso che il nome sia un po 'troppo grande per quello che è solo un sovraccarico (in fase di compilazione); Qui non vedo il polimorfismo degli oggetti, solo due diverse funzioni che sono disponibili per la scelta al momento della compilazione.
Dobbiamo anche ricordare che alcune lingue supportano le Funzioni variabili (aka varargs), che consente una lista o una sequenza di ulteriori argomenti. Solitamente al massimo una tale lista di argomenti aggiuntivi è consentita e tale lista viene posizionata dopo ogni parametro regolare (non variabile). In genere, tutti i parametri in tale elenco varargs condividono alcune qualità comuni, quindi può essere considerato come un elenco di un certo tipo. Questa funzione non funziona necessariamente bene con i parametri opzionali.