Pregunta

Posible duplicado:
Sintaxis de función lambda en javascript sin aparatos ortopédicos rizados

Tratando con Protovis (implementan algunas funciones de delegado extrañas que se dan sin aparatos ortopédicos rizados, ¿alguien puede darle luz para mí, por favor? Ejemplo:

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

Solución

En general, como se explica en el pregunta @missingno vinculada a, esta es una sintaxis alternativa para declarar funciones, compatibles principalmente por Firefox. En vez de:

function() { return "stuff" };

omites los aparatos ortopédicos y return declaración:

function() "stuff";

El final de la función ocurre en cualquier lugar donde podría terminar una declaración normal: un punto y coma (;), una coma (,), o un paréntesis cercano ()).

En protovis, hay muchos casos en los que debe declarar funciones anónimas cortas y de una afirmación para transmitir como argumentos a las llamadas de método. Este es un patrón tan común que esa biblioteca incluye una utilidad de análisis para asegurarse de que la sintaxis anterior sea compatible con navegadores distintos de Firefox. Si adjunta su código Protovis en etiquetas de script como esta:

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

El script será evaluado por el analizador Protovis, que garantiza el soporte para la sintaxis especial.

Mis dos centavos en esto: la ventaja de esta sintaxis es que es realmente rápido (además de todos los ejemplos lo usan). Un script típicamente usando protovis implica un lote de funciones anónimas, por lo que esto puede ahorrarle algo de escritura, y se ve bastante increíble. Cuando comencé a usar Protovis, lo usé mucho, no solo en llamadas de métodos, sino también en declaraciones variables.

Pero, tiene algunos problemas realmente pesados:

  • Porque todo su código se ejecuta a través del analizador Proto return declaraciones y luego eval() Es, se vuelve fantásticamente difícil depurar errores de sintaxis simples. Obtiene todos estos errores de "identificador inesperado" que apuntan a la eval() Línea en el código Protovis, sin indicios de dónde está ocurriendo el problema (una semicolon faltante, etc.) en su propio código.

  • Si desea que su código funcione fuera de Firefox, debe incluir todo su código en el especial javascript+protovis Etiquetas de script, que significa que no hay archivos externos. Una vez que comience a hacer algo de la complejidad incluso marginal, realmente desea mantener sus guiones separados la mayor parte del tiempo.

  • Al igual que con cualquier sintaxis "inteligente", puede ser muy difícil de leer, especialmente cuando la está utilizando de manera inesperada (por ejemplo, fuera de una llamada de método). Sí, es conciso, pero hay un precio definitivo que pagar en la legibilidad.

Dicho todo esto, todavía lo uso cuando quiero hacer un boceto difícil rápidamente. Pero la mayoría de las veces, sugeriría apegarse a las etiquetas de script normales y las declaraciones de función estándar y rizada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top