Perché AMD definisce i suoi argomenti facoltativi in un ordine inverso della natura di JavaScript?

StackOverflow https://stackoverflow.com//questions/20020761

  •  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

È stato utile?

Soluzione

Funzioni che accettano argomenti in ordine casuale o molto facoltativo ti danno solo un po 'di zucchero sintattico .Non è necessariamente qualcosa per cui dovresti puntare, ma è bello se funziona.

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 zucchero sintattico .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top