0

null プロパティではないかもしれませんが、ここに何が起きているかを示します: このコードがあるとしましょう -

1. someclipthatsinanarray[i].addEventListener(Event.ENTER_FRAME, arrayframe);
2. function arrayframe(e:Event):void
3. {
4. e.currentTarget.removeEventListener(Event.ENTER_FRAME, arrayframe);
5. e.currentTarget.parent.removeChild(e.currentTarget);
6. e.currentTarget = null;
7. }

- 6 行目に注意してください。これをデバッガーで実行すると、次のエラーが発生します。

Error 1119: Line 6, arrayframe: Property is read - only.

読み取り専用とは何ですか? null が読み取り専用の場合、なぜですか?

4

2 に答える 2

3

currentTargetのプロパティですEvent。これは読み取り専用であり、そのプロパティを変更することはできません。

これがあなたがやりたいと思うことです:

someclipthatsinanarray[i].addEventListener(Event.ENTER_FRAME, arrayframe);

// event handler
function arrayframe(e:Event):void
{
    var clip:MovieClip = e.currentTarget as MovieClip;

    clip.removeEventListener(Event.ENTER_FRAME, arrayframe);
    clip.parent.removeChild(clip);
    clip = null;
}

コメントで述べたように、この行はあなたが信じていることをしていません:

clip = null;

クリップはそのムービークリップへの単なるローカル参照であり、配列内の要素と同じようにムービークリップへの参照です。したがって、クリップを null に設定しても、MovieClip は削除されません。単に参照を null にするだけです。これはローカル変数であり、スコープはハンドラーの完了時に終了するため、実際には必要ありません。

オブジェクトへの参照が残っていない場合にのみ、オブジェクトはガベージ コレクションの対象としてマークされます。

また、別のオブジェクトの表示リストにあることは参照と見なされることに注意することも重要です。

于 2013-04-29T16:53:41.040 に答える
1

e.currentTargetはイベントのプロパティです。ディスパッチされた後にイベントを変更してはならないため、読み取り専用です。

ただし、この特定のイベントをリッスンしているすべての関数がコードの実行を終了するとすぐに、イベントに保存されているクリップへの参照がガベージ コレクションされます。

于 2013-04-29T16:39:24.537 に答える