7.2Delegateクラスをスクリプトやクラスにimportすると、イベントを特定のスコープと関数に委譲(delegate)することができます。シンタックスは、つぎのとおりです。関数));引数スコープオブジェクトは、引数に指定した関数を呼出すスコープを特定します。Delegate.create()の呼出しには、一般にふたつの使い方があります。同一のイベントを、異なるふたつの関数に送ります。イベントの関数への委譲」をご参照ください。関数をその定義されたスコープで呼出します。関数をaddEventListener()の引数として渡すと、その関数はメッセージを配信するコンポーネントインスタンスのスコープで実行され[*1]、関数を定義したオブジェクトのスコープでは呼出されません。関数のスコープの委譲」をご参照ください。[*1]addEventListener()メソッドの第2引数に関数を指定すると、リスナー関数はイベントを配信するコンポーネントインスタンスのスコープで呼出されます。以下のサンプルスクリプトでは、リスナー関数clickHandlerがButtonコンポーネントインスタンスmy_btnのスコープで呼出されるので、関数ブロック({})内のthisはmy_btnを参照します。したがって、thisを参照してタイムライン上のプロパティにアクセスしようとすれば、undefinedが返されます。clickHandler);もっとも、タイムライン上であれば、thisを参照せずデフォルト参照を使うことで対応できます。関数のスコープの委譲」のようにクラスでメソッド(関数)をリスナーに指定したい場合でしょう。イベントの関数への委譲Delegate.create()の呼出しが有効なのは、ふたつのコンポーネントがあって、それらが同名のイベントを配信する場合です。CheckBoxとButtonコンポーネントがあり、switchステートメントを使ってeventObject.targetプロパティから取得した情報をもとに、どちらのコンポーネントがclickイベントを配信したのか判定したいとします。以下のコードを試すには、myCheckBox_chbという名前のCheckBoxとmyButton_btnという名前のButtonコンポーネントインスタンスを、それぞれステージに配置します。ふたつのインスタンスを選択し、[F8]キーを押して[シンボルに変換]します。2.0クラス]にクラス名「Cart」を入力します。新しいシンボルのインスタンスには、任意のインスタンス名を[プロパティインスペクタ]で設定します。このシンボルはCartクラスに関連づけられ、インスタンスはCartクラスのインスタンスになります。:trace(eventObj.target+":"+eventObj.type);break;}}}[*2]原文にはこのimprotステートメントの記述があります。Delecateクラスは使用していませんので、不要です。以下は、同じクラスファイル(Cart.as)に対して、Delegateを使用するかたちに修正したものです。{trace(eventObj.target+":"+eventObj.type);trace(this);}}[*3]Delegateクラスを使って作成・登録したリスナーを、イベントを配信するインスタンスから削除するには、予めリスナーへの参照を取得しておく必要があります。Delegate.create()メソッドは、関数(Function型データ)を返します。関数のスコープの委譲addEventListener()メソッドには、ふたつの引数があります。イベント名とリスナーへの参照です。リスナーは、オブジェクトか関数のいずれかになります。オブジェクトを渡すと、オブジエクトに設定されたコールバック関数が、オブジェクトのスコープで実行されます。関数が渡されると、関数はaddEventListener()メソッドを呼出したコンポーネントインスタンスのスコープで実行されることになります。詳しくは、「リスナー内のスコープについて」をご参照ください。関数はイベントを配信するインスタンスのスコープで実行されるので、関数本体のthisキーワードはそのイベント配信インスタンスを参照することになります。したがって、関数が実装されたクラスのプロパティやメソッドにはアクセスできません。Delegateクラスを使うと、関数のスコープを、その関数が実装されたクラスに委譲することができます。すると、その関数を宣言したクラスのプロパティやメソッドにアクセスすることが可能になります。以下のサンプルは、前節「イベントの関数への委譲」と同じ内容で、Cart.asクラスファイルを異なるスタイルにしました。関数のスコープがiを定義したCartインスタンスではないからですtrace(i);}}Cartクラスのプロパティとメソッドにアクセスできるようにするには、つぎのようにDelegate.create()を呼出してaddEventListener()の第2引数に指定します。events]より邦訳。