Question

Possible en double: syntaxe de la fonction Lambda en JavaScript sans accolades

Faire face à Protovis - ils mettre en œuvre des fonctions de délégués étranges qui sont donnés sans accolades - Quelqu'un peut-il l'ombre d'une lumière pour moi, s'il vous plaît? Exemple:

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

La solution

En général , comme expliqué dans le @missingno question lié à , ceci est une autre syntaxe pour déclarer les fonctions, principalement pris en charge par Firefox. Au lieu de:

function() { return "stuff" };

vous omettez les accolades et l'énoncé de return:

function() "stuff";

La fin de la fonction se produit partout où une déclaration normale pourrait finir -. Un point-virgule (de ;), une virgule (,), ou une parenthèse de fermeture ())

Dans Protovis , il y a beaucoup de cas où vous avez besoin de déclarer des fonctions anonymes courte, une déclaration de passer comme arguments aux appels de méthode. Ceci est un modèle commun que cette bibliothèque comprend un utilitaire d'analyse pour vous assurer que la syntaxe ci-dessus est pris en charge dans les navigateurs autres que Firefox. Si vous mettez votre code Protovis dans les balises de script comme ceci:

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

le script sera évalué par l'analyseur Protovis, qui assure le soutien de la syntaxe spéciale.

Mes deux cents à ce sujet: Le côté positif de cette syntaxe est qu'il est très rapide (plus tous les exemples utilisent). Un script typiquement en utilisant Protovis implique un beaucoup de fonctions anonymes, si cela peut vous faire économiser de frappe, et il semble assez impressionnant. Quand j'ai commencé à utiliser Protovis, je l'ai utilisé beaucoup -. Pas seulement dans les appels de méthode, mais dans les déclarations variables aussi bien

Mais , il a quelques problèmes très lourds:

  • Parce que tout votre code est exécuté par l'analyseur Protovis, qui essentiellement munges le code à ajouter de nouveau les déclarations de return puis eval(), il devient incroyablement difficile d'erreurs de syntaxe simples de débogage. Vous obtenez tous ces « identifiant inattendu » erreurs de pointage à la ligne de eval() dans le code Protovis, sans indication de l'endroit où se produit dans votre propre code la question (un virgule manquant, etc).

  • Si vous voulez que votre code du travail en dehors de Firefox, vous devez inclure tout votre code dans les balises de script javascript+protovis spéciaux, ce qui signifie pas de fichiers externes. Une fois que vous commencez à faire quoi que ce soit de la complexité même marginale, vous voulez vraiment garder vos scripts séparés la plupart du temps.

  • Comme avec toute syntaxe « intelligente », il peut être vraiment difficile à lire, surtout quand vous l'utilisez de manière inattendue (par exemple en dehors d'un appel de méthode). Oui, il est concis, mais il y a un certain prix à payer lisibilité.

Cela dit, je l'utilise encore quand je veux faire rapidement une esquisse. Mais la plupart du temps, je vous suggère de coller à des balises de script normales et standard, les déclarations de fonction-contreventement bouclés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top