Frage

Mögliches Duplikat:
Lambda -Funktionssyntax in JavaScript ohne lockige Zahnspangen

Umgang mit Protovis - sie implementieren einige seltsame Delegierfunktionen, die ohne lockige Zahnspangen angegeben werden - kann jemand für mich ein Licht für mich beschatten, bitte? Beispiel:

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

Lösung

Im Algemeinen, wie in der erklärt Frage @missingno verlinkt mit, Dies ist eine alternative Syntax für die Erklärung von Funktionen, die hauptsächlich von Firefox unterstützt werden. Anstatt von:

function() { return "stuff" };

Sie lassen die lockigen Zahnspangen weg und return Aussage:

function() "stuff";

Das Ende der Funktion tritt überall dort auf, wo eine normale Aussage endet - ein Semikolon (;), ein Komma (,) oder eine enge Klammern ()).

In Protovis, Es gibt viele Fälle, in denen Sie kurze anonyme Funktionen für ein Statement deklarieren müssen, um sie als Argumente an Methodenaufrufe weiterzugeben. Dies ist ein so häufiges Muster, dass diese Bibliothek ein Parsing -Dienstprogramm enthält, um sicherzustellen, dass die obige Syntax in anderen Browsern als Firefox unterstützt wird. Wenn Sie Ihren Protovis -Code in Skript -Tags wie folgt einschließen:

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

Das Skript wird vom Protovis -Parser bewertet, was die Unterstützung der speziellen Syntax gewährleistet.

Meine zwei Cent dazu: Der Aufwärtstrend dieser Syntax ist, dass sie sehr schnell ist (plus alle Beispiele verwenden sie). Ein typisches Skript mit Protovis beinhaltet a viel von anonymen Funktionen, sodass Sie einige Tippen ersparen können und es sieht ziemlich großartig aus. Als ich anfing, Protovis zu verwenden, habe ich es viel verwendet - nicht nur in Methodenaufrufen, sondern auch in variablen Deklarationen.

Aber, Es hat ein paar wirklich schwere Probleme:

  • Weil Ihr Codes durch den Protovis-Parser ausgeführt wird, der den Code im Wesentlichen untermischt, um die neu zu nutzen return Aussagen und dann eval() Es wird fantastisch schwierig, einfache Syntaxfehler zu debuggen. Sie erhalten all diese "unerwarteten Kennung" -Fehler, die auf die zeigen eval() Zeile im Protovis -Code, ohne Hinweis darauf, wo das Problem (ein fehlendes Semikolon usw.) in Ihrem eigenen Code auftritt.

  • Wenn Sie möchten, dass Ihr Code außerhalb von Firefox arbeitet, müssen Sie Ihren gesamten Code in das Special einbeziehen javascript+protovis Skript -Tags, was keine externen Dateien bedeutet. Sobald Sie anfangen, eine gleiche marginale Komplexität zu tun, möchten Sie Ihre Skripte wirklich die meiste Zeit getrennt halten.

  • Wie bei jeder "cleveren" Syntax kann es wirklich schwer zu lesen sein, insbesondere wenn Sie sie auf unerwartete Weise verwenden (z. B. außerhalb eines Methodenaufrufs). Ja, es ist prägnant, aber es gibt einen bestimmten Preis, der in der Lesbarkeit zahlt.

Alles in allem benutze ich es immer noch, wenn ich schnell eine grobe Skizze machen möchte. Aber die meiste Zeit würde ich empfehlen, sich an normalen Skript-Tags und Standardfunktionserklärungen mit lockiger Brand zu halten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top