null MovieClipを機能させるにはどうすればよいですか?私は試した:
function one()
{
var mc:MovieClip=new MovieClip();
two(mc);
}
function two(mcref:MovieClip)
{
mcref=null;
}
しかし残念ながらそれは機能せず、「mc」は関数の後でnullではありません。
null MovieClipを機能させるにはどうすればよいですか?私は試した:
function one()
{
var mc:MovieClip=new MovieClip();
two(mc);
}
function two(mcref:MovieClip)
{
mcref=null;
}
しかし残念ながらそれは機能せず、「mc」は関数の後でnullではありません。
それはうまくいくはずです、これを試してください:
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;
}
}
}
これはスコープ チェーンの問題です。関数に MovieClip を渡す場合two()
。実際には参照値を渡しません。そのため、関数内で参照オブジェクトにアクセスすることはできません。値を有効にするか、関数スコープ内でのみ実行します。
これを読んでください:AS3 Funciton
関数の実行が開始されるたびに、多数のオブジェクトとプロパティが作成されます。最初に、アクティベーション オブジェクトと呼ばれる特別なオブジェクトが作成されます。このオブジェクトには、パラメーターとローカル変数、または関数本体で宣言された関数が格納されます。内部メカニズムであるため、アクティブ化オブジェクトに直接アクセスすることはできません。次に、Flash Player または Adobe AIR が識別子宣言をチェックするオブジェクトの順序付きリストを含むスコープ チェーンが作成されます。実行されるすべての関数には、内部プロパティに格納されるスコープ チェーンがあります。ネストされた関数の場合、スコープ チェーンは独自のアクティベーション オブジェクトで始まり、その後に親関数のアクティベーション オブジェクトが続きます。チェーンは、グローバル オブジェクトに到達するまでこのように続きます。グローバル オブジェクトは、ActionScript プログラムの開始時に作成されます。