質問

可能な複製:
巻き毛のないJavaScriptのLambda機能構文

Protovisを扱う - 彼らは巻き毛の装具なしで与えられたいくつかの奇妙な代表的な機能を実装します - 誰かが私のためにそれに光を当てることができますか?例:

vis.add(pv.Label)
.data(cols)
.left(function() this.index * w + w / 2)
.top(0)
.textAngle(-Math.PI / 2)
.textBaseline("middle");
役に立ちましたか?

解決

一般に, 、で説明されているように 質問@missingnoにリンクされています, 、これは、主にFirefoxによってサポートされている宣言機能の代替構文です。それ以外の:

function() { return "stuff" };

巻き毛の装具を省略します return 声明:

function() "stuff";

関数の終わりは、通常のステートメントが終了する可能性のあるどこでも発生します - セミコロン(;)、コンマ(,)、または密接な括弧()).

Protovisで, 、メソッド呼び出しの引数として渡すために、短い1つのステートメント匿名関数を宣言する必要がある多くの場合があります。これは非常に一般的なパターンであるため、ライブラリには解析ユーティリティが含まれており、上記の構文がFirefox以外のブラウザーでサポートされていることを確認します。このようなスクリプトタグでProtovisコードを囲む場合:

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

スクリプトは、Protovisパーサーによって評価され、特別な構文のサポートを保証します。

これに関する私の2セント:この構文の利点は、それが非常に高速であることです(さらに、すべての例がそれを使用しています)。 Protovisを使用する通常のスクリプトにはaが含まれます 多く 匿名の関数のため、これによりタイピングを節約でき、かなり素晴らしいように見えます。私が最初にProtovisを使用し始めたとき、私はそれを多く使用しました - メソッド呼び出しだけでなく、変数宣言も同様です。

しかし, 、それはいくつかの本当に重い問題があります:

  • すべてのコードがProtovis Parserを介して実行されているため、本質的にコードを混乱させて再び添加します return 声明、そして eval() これは、単純な構文エラーをデバッグするのが非常に難しくなります。これらすべての「予期しない識別子」エラーが得られます eval() Protovisコードの行(問題が失われているセミコロンなど)が自分のコードで発生している場所を示していません。

  • Firefoxの外でコードを動作させたい場合は、すべてのコードをスペシャルに含める必要があります javascript+protovis スクリプトタグ。これは、外部ファイルがないことを意味します。わずかな複雑ささえも始めたら、ほとんどの場合、スクリプトを分離し続けたいと思うでしょう。

  • 他の「賢い」構文と同様に、特に予期しない方法で使用している場合(メソッド呼び出し以外)、読みにくい場合があります。はい、それは簡潔ですが、読みやすさで支払うための明確な価格があります。

とは言っても、すぐに大まかなスケッチを作りたいときはまだそれを使用しています。しかし、ほとんどの場合、私は通常のスクリプトタグと標準的な巻き毛のブレースされた関数宣言に固執することをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top