事件處理常式裡的“this”問題

事件處理常式裡的“this”問題
文∕趙英傑

讀者來信詢問《碼上就會:Flash 8動畫設計寶典》第十二章「製作互動選單介面」中的選單事件處理常式中,與“this”關鍵字相關的問題。問題的關鍵在於「事件處理常式」有兩種語法,以底下的格式來說(寫在關鍵影格中),this指的是item1「影片片段」實體內部的時間軸(請參閱書本12-17頁的for迴圈程式)。

item1.onRelease = function () {
   this.gotoAndPlay("out");
}

在上面的程式片段中,this.gotoAndPlay(“out”); 指的是控制item1本身(內部)的時間軸,跳到’out’標籤影格;如果您雙按該影片的選單項目元件,進入它的時間軸,就能看見out標籤影格是一個稍微放大的圖像。

相反地,若採用Flash的「行為」來建立事件處理程式(如書本12-15所示),它將採用底下的語法,把程式直接附加在按鈕(或影片片段實體)上:

on (release) {
   this.gotoAndPlay("close");
}

此時,this將有兩種截然不同的意義:

  • 在「按鈕」物件上,this代表的是按鈕所在的時間軸;
  • 在「影片片段」實體上,this仍是該實體內部的時間軸!

因此,書本12-5頁的透明按鈕「行為」指令中的this,代表的是「彈出式選單」元件的時間軸,而非該元件內部的時間軸。

相反地,如果要把上面的按鈕程式放到關鍵影格,事件處理常式就要改寫成(假設透明按鈕的實體名稱為“hide_btn”,如書本12-20頁所示):

hide_btn.onRelease = function () {
   // 沒有指定路徑,代表控制此按鈕所在的時間軸
   gotoAndPlay("close");
}

或者:

hide_btn.onRelease = function () {
   // 指定路徑時,路徑的起始點是在「元件的內部」!
   // 因此按鈕所在的時間軸,是在「內部的上一層」。
   this._parent.gotoAndPlay("close");
}
Posts created 483

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top