Perché AMD definisce i suoi argomenti facoltativi in un ordine inverso della natura di JavaScript?
-
21-12-2019 - |
Domanda
Per quanto ne so, un sacco di codice JavaScript usa ancora Iife come modello del loro spazio dei nomi, e credo che gli sviluppatori JavaScript siano abituati a ci sono di solito qualcosa di dopo, non aspettarti che vedresti tutto seLeggi il codice solo dall'inizio ;A volte parentesi vuota, a volte più argomenti.
Letto in parte di require.js
e ha visto l'adeguamento degli argomenti aggiuntivi nella sua implementazione define
:
define=function (name, deps, callback) {
var node, context;
//Allow for anonymous modules
if (typeof name!=='string') {
//Adjust args appropriately
callback=deps;
deps=name;
name=null;
}
//This module may not have dependencies
if (!isArray(deps)) {
callback=deps;
deps=null;
}
// ..
.
Mi piacerebbe capire meglio le cose del perché è definita in questo modo, e dovrei seguire questa moda quando definerò le mie stesse API?
La specifica: AMD
Soluzione
Funzioni che accettano argomenti in ordine casuale o molto facoltativo ti danno solo un po 'di zucchero sintattico
Posso dare un esempio in cui gli argomenti sono non Nice:
JSON.stringify(data_obj, undefined, "\t");
.
Devi passare indefinito come funzione sostituitore (perché non ho una funzione sostituitrice, è facoltativo).Ovviamente sarebbe banale aggiungere qualcosa come il codice che hai pubblicato che controlla il tipo di argomento 2 ° e 3 ° per ridurlo a:
JSON.stringify(data_obj, "\t");
.
.
In Java (non JavaScript) hai funzioni polimorfiche come:
public function get(String string, List list) {}
public function get(List list) {}
.
A seconda di come si chiama get
, chiamerà una di queste implementazioni.Quando implemi questi potresti vedere qualcosa come:
public function get(String string, List list) {
/* actual implementation */
}
public function get(List list) {
this->get("", list); // call get with default 1st argument
}
.
Quindi non c'è davvero così tanta sostanza, solo