1

如何在函数中制作 null MovieClip?我试过:

function one()
{
var mc:MovieClip=new MovieClip();
two(mc);
}

function two(mcref:MovieClip)
{
mcref=null;
}

但不幸的是,它不起作用,并且“mc”在函数后不为空。

4

2 回答 2

1

它应该工作,试试这个:

package 
{
import flash.display.MovieClip;

public class Main extends MovieClip
{
    public var mc:MovieClip;

    public function Main():void 
    {
        mc = new MovieClip();
        trace("mc : " , mc);

        makeMovieClipNull();
        trace("mc 2: ", mc);
    }

    public function makeMovieClipNull():void
    {
        mc=null;
    }

}

}
于 2013-03-12T10:54:49.927 回答
1

这是范围链问题。如果您将 MovieClip 传递给two()函数。实际上没有传递参考值。所以你不能访问函数中的引用对象。使值有效或仅在函数范围内执行。

阅读:AS3 Funciton

每当函数开始执行时,都会创建许多对象和属性。首先,创建一个称为激活对象的特殊对象,它存储参数和函数体中声明的任何局部变量或函数。您不能直接访问激活对象,因为它是一种内部机制。其次,创建一个范围链,其中包含 Flash Player 或 Adob​​e AIR 检查标识符声明的对象的有序列表。每个执行的函数都有一个存储在内部属性中的作用域链。对于嵌套函数,作用域链从它自己的激活对象开始,然后是其父函数的激活对象。链以这种方式继续,直到它到达全局对象。全局对象是在 ActionScript 程序开始时创建的,

于 2013-03-12T11:55:59.440 回答