属性null是只读的

时间:2013-04-29 16:35:50

标签: actionscript-3 flash actionscript

它可能不是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是只读的,那么为什么?

2 个答案:

答案 0 :(得分:3)

currentTargetEvent的属性。它是只读的,您无法修改该属性。

以下是我认为你想做的事情:

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,它只是将我们的引用归零,实际上甚至不需要它,因为它是一个局部变量,它的范围在处理程序完成时结束。

一旦没有对剩余对象的引用,对象才真正标记为垃圾收集。

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

答案 1 :(得分:1)

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

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