比如MovieClip的stop...雖然stop();和this.stop();做的事情,產生的結果在大部分時候是一樣的..但是,在一些不經意的地方,就會發生一些意想不到的事情...
比如在用基於prototype的方法,重寫MovieClip的時間軸控制函數,來增加 檢測mc的停放 狀態時,就會出現意外,
andre的代碼註釋裏面提到
just write this.method() instead of method() Old Flash4 methods are in global use and not affected by a prototype changing.
上面這個還是小問題,下面這個就是大問題了~~
在as2中,使用一個繼承MovieClip的子類是很平常的事情,但如果在類中不加this的話,flash player會認爲你使用的是flash4的全局函數,而這樣的函數用在類初始的時候,就會發生意外
// MyMC.as
class MyMC extends MovieClip
{
static var symbol_linkage:String = "__Packages.MyMC";
static var symbol_owner:Function = MyMC;
static var symbol_registerd:Boolean = Object.registerClass(symbol_linkage,symbol_owner);
public function MyMC ()
{
stop();
//this.stop();
}
}
// MyClass.as
import MyMC;
class MyClass
{
private var mymc:MyMC;
public function MyClass(root:MovieClip) {
mymc = MyMC( root.attachMovie("MyMC","mymc", 0) );
}
}
// test.fla - frame 1
var myclass:MyClass = new MyClass(this);
trace(myclass); // output undefined
(其中MyMC使用了的技巧,查看這裏
也可以用傳統的方法來測試,在libray中建立一個MovieClip Symbol,然後把linkage id和AS2.0 Class設置爲MyMC)
你會發現myclass竟然是undefined...而把MyMC構造函數中的stop();換成this.stop();就沒有問題了...
這就是flash4函數帶來的意外,並且在as2的類中,應儘量避免使用flash4函數的名稱,來命名類的成員.這樣也可能使類成員工作不正常...
flash4的函數可以查看
C:/Documents and Settings/<user name>/Local Settings/Application Data/Macromedia/Flash 8/<language>/Configuration/Classes/toplevel.as