2014-01-13 138 views
0

我有一個名爲'main.as'的父類。我試圖讓子類調用main的函數。他們都在同一個文件夾中。AS3未定義函數#1006

// main.as // 
package { 

    public class main extends MovieClip { 

    public function main() { 
     var child:child_mc = new child_mc(this); 
    } 

    public function callFunction():void { 
     trace("Done it"); 
    } 

    } 
} 

// child.as // 
package { 
    import main; 

    public class child extends MovieClip { 

    private var main:MovieClip = new MovieClip(); 

    public function child(main:MovieClip):void { 
     this.main = main; 
     main.callFunction(); 
    } 

    } 
} 

這是我一直得到的錯誤:

TypeError: Error #1006: callFunction is not a function. 

所以我嘗試做一個跟蹤這樣

trace(main.callFunction); 

和它說不確定。有人能告訴我我錯過了什麼嗎?我覺得這是我忽視的一個非常基本的東西!

+0

好像你不需要'導入主;',嘗試刪除它 – Cherniv

+0

我仍然收到相同的錯誤。我認爲導入它將有助於識別該功能。 – user1234567

+0

那麼可能會向我們展示更多的代碼?類定義等 – Cherniv

回答

1

你的「孩子」包被定義爲「主」。我甚至不知道它是如何遵守的,更不用說運行到顯示錯誤信息的地步了。

我相信下面的代碼應該做你的預期。

(我也冒昧地重命名類使用CamelCase(與首字母大寫)堅持最佳實踐,更容易區分的變量名。)

Main.as

package { 

    public class Main extends MovieClip { 

     public function Main() { 
      var child:ChildMC = new ChildMC(); 
      child.main = this; 
     } 

     public function callFunction():void { 
      trace("Done it"); 
     } 

    } 
} 

編輯:我剛纔看到你的評論說,指出child_mc是庫中的影片剪輯。我想那child類被設置爲child_mc的基類?

如果是這樣,您不能通過實例化程序傳遞屬性,您需要找到另一種方法將Main類的實例傳遞給Child類。

一種方法是增加一個二傳手,如下所示:

Child.as(基類ChildMC)

package { 

    public class Child extends MovieClip { 

     private var _main:Main; 

     public function Child() { 

     } 

     public function set main(main:Main):void { 
      this._main = main; 
      this._main.callFunction(); 
     } 

    } 
} 
+0

根據看到'child_mc'是庫影片剪輯的更新回答。 –

+0

是的,這是一個錯字。我改變了我所有的班級名稱,因爲它很長很複雜,我希望這可以更容易閱讀。謝謝您的幫助! – user1234567