Domanda

Eventuali duplicati:
Lambda funzione sintassi in JavaScript senza bretelle ricci

Si occupano di Protovis - prevedano l'impiego di alcune funzioni delegate strane che sono dati senza parentesi graffe - qualcuno può ombreggiare una luce su di esso per me, per favore? Esempio:

vis.add(pv.Label)
.data(cols)
.left(function() this.index * w + w / 2)
.top(0)
.textAngle(-Math.PI / 2)
.textBaseline("middle");
È stato utile?

Soluzione

In generale , come spiegato nella domanda @missingno legato a , questa è una sintassi alternativa per funzioni, principalmente supportate da Firefox dichiarando. Invece di:

function() { return "stuff" };

si omettono le parentesi graffe e la dichiarazione return:

function() "stuff";

La fine della funzione si verifica nessuna parte che una dichiarazione normale potrebbe finire -. Un punto e virgola (;), una virgola (,), o una parentesi chiusa ())

In Protovis , ci sono un sacco di casi in cui è necessario dichiarare breve, una dichiarazione funzioni anonime per passare come argomenti per chiamate di metodo. Questo è un modello comune che quella libreria include un programma di utilità di analisi per assicurarsi che la sintassi di cui sopra è supportata in browser diversi da Firefox. Se si racchiude il codice Protovis nei tag script come questo:

<script type="text/javascript+protovis">
// ...
</script>

lo script sarà valutata dal parser Protovis, che assicura il supporto per la sintassi speciale.

I miei due centesimi su questo: Il vantaggio di questa sintassi è che è veramente veloce (più tutti gli esempi usarlo). Un tipicamente script utilizzando Protovis comporta un molto di funzioni anonime, quindi questo è possibile risparmiare un po 'di battitura, e sembra abbastanza impressionante. Quando ho iniziato ad usare Protovis, l'ho usato molto -. Non solo in chiamate di metodo, ma in dichiarazioni di variabili come pure

Ma , ha alcuni problemi davvero pesanti:

  • A causa tutto il codice viene eseguito attraverso il parser Protovis, che essenzialmente munges il codice per aggiungere nuovamente le normative return e poi eval(), diventa incredibilmente difficile eseguire il debug semplici errori di sintassi. È possibile ottenere tutti questi errori "Identifier Unexpected" che punta alla linea eval() nel codice Protovis, senza alcuna indicazione di dove il problema (un punto e virgola mancante, ecc) si sta verificando nel proprio codice.

  • Se si desidera che il codice per lavoro al di fuori di Firefox, è necessario includere tutto il codice negli appositi tag script javascript+protovis, il che significa che nessun file esterni. Una volta che si inizia a fare qualche cosa di complessità, anche marginale, si vuole veramente per mantenere i vostri script separano la maggior parte del tempo.

  • Come con qualsiasi sintassi "intelligente", si può ottenere molto difficile da leggere, soprattutto quando lo si usa in modo inaspettato (ad esempio al di fuori di una chiamata di metodo). Sì, è concisa, ma c'è un prezzo definitivo da pagare in leggibilità.

Detto questo, ho ancora lo uso quando voglio fare uno schizzo in fretta. Ma la maggior parte del tempo, io suggerirei di attenersi ai normali tag script e, le dichiarazioni di funzioni dalle parentesi graffe standard.

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