2013-03-12 48 views
1

如何讓null MovieClip在函數中?我試過了:如何讓null MovieClip在函數中?

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

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

但不幸的是它不起作用,並且「mc」在函數後不爲空。

回答

1

這是作用域鏈的問題。如果你將MovieClip傳遞給two()函數。實際上不通過參考值。所以你不能在函數中訪問參考對象。驗證值或僅在函數範圍內執行。

讀取此:AS3 Funciton

在任何時間的函數開始執行時,被創建的對象的數量和 性質。首先,創建一個稱爲激活對象的特殊對象,用於存儲參數和任何局部變量 或在函數體中聲明的函數。您不能直接訪問激活對象,因爲它是一種內部機制。 其次,將創建一個作用域鏈,其中包含Flash Player或Adobe AIR檢查標識符 聲明的對象列表 。執行的每個函數的作用域鏈都是 ,存儲在內部屬性中。對於嵌套函數,作用域鏈 以其自己的激活對象開始,後面跟着它的父級 函數的激活對象。鏈條以這種方式繼續下去,直到它達到全球物體的 。全局對象在一個 ActionScript程序開始時創建,幷包含所有全局變量和 函數。

+1

爲了清楚起見,這裏的兩個答案都是正確的。這個答案解釋了爲什麼原始代碼不工作。 @Vipul下面的答案顯示瞭如何使它工作:) – 2013-03-12 17:03:05

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

} 

} 
+0

不幸的是,它不起作用,「mc」不是空函數後,只有「目標」。 – user2160453 2013-03-12 11:03:47

+0

我已經編輯了上面的代碼,看看它。 – Vipul 2013-03-12 12:56:59

+0

這不是我想要的。我需要在外部函數中將MovieClip設置爲null,但是如同告訴「bitmapdata.com」,這是不可能的。 – user2160453 2013-03-12 14:24:15

相關問題