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. }

- 并注意第六行。我在调试器中运行它并得到这个错误:

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;

clip 只是对该 MovieClip 的本地引用,就像数组中的元素只是对该 MovieClip 的引用一样。因此,将剪辑设置为 null,并不是删除 MovieClip,而只是将我们的引用清空,这实际上甚至不需要,因为它是一个局部变量,并且它的作用域在处理程序完成后结束。

只有在没有对剩余对象的引用时,才真正将对象标记为垃圾回收。

同样重要的是要注意,在另一个对象的显示列表中被视为参考。

于 2013-04-29T16:53:41.040 回答
1

e.currentTarget是您的活动的财产。它是只读的,因为在调度后不应修改事件。

不过不用担心,只要监听这个特定事件的所有函数都执行完它们的代码,对存储在事件中的剪辑的引用就会被垃圾收集。

于 2013-04-29T16:39:24.537 回答