3

D3 v2.4.2 github repository のブレット チャートの例を参照しています。

この例で何が起こっているのかを明確にするために、いくつか質問があります。

1) bulletChart 関数には、bullet.ranges = function(x) {}、bullet.markers = function(x) {} などの形式で 8 つの宣言があります。この bullet オブジェクトはどこから来たのでしょうか? ライブラリに組み込まれていますか?すでに変数範囲を関数 bulletRanges に設定していると思いましたか、それともこれら 2 つの異なる範囲変数ですか?

2)これらの機能の中で実際に何が起こっているのか?

3)最後の質問です。bulletChart 関数が実行を開始すると、実行が来ると bullet 関数の実行を開始しますか、それとも明示的な呼び出しを待ちますか? bullet(g) が明示的に呼び出されるのを実際に見たことがないからですか?

このライブラリは本当に混乱する可能性があります。どんな助けでも大歓迎です。

4

1 に答える 1

5

1)bullet名前の先頭の は、70 行目で作成された同じ名前の関数を参照します。呼び出しにより、オブジェクトにメンバーが追加されます。これも呼び出し可能です。これは基本的に、返されたオブジェクトをカスタマイズできるようにする方法です。オブジェクト指向の用語でbulletは、オブジェクトであり、関数はそのメンバーのアクセサーを定義します。関数bulletRangesなどは、外部bulletChart関数に対して同様の機能を提供します。オブジェクト指向の用語では、ネストされたオブジェクトを考えてください。

2) 1 を参照してください。関数は、関数内で定義された変数のアクセサーであり、bulletこの方法で動作をカスタマイズできます。繰り返しになりますが、OO に相当するものは、アクセサーを通じて公開されるオブジェクトのプライベート メンバーです。

3) 関数の戻り値はbullet呼び出し可能なオブジェクトです。これがbulletChart返ってきます。したがって、この例の関数呼び出しは、19 行目と 36 行目で (d3 関数を介して) 変数chart.call関数に渡すことによって行われます。5 行目の代入はchart、オブジェクトと呼び出し可能なクロージャーを構築するコードを呼び出すものです。

Javascript に慣れていない場合は、クロージャーなどのよりエキゾチックな機能に関するチュートリアル資料を調べると役立つ場合があります。

于 2012-05-23T21:15:34.277 に答える