在事件处理函数内声明和执行的变量和命令的范围(即上下文)取决于所使用的事件处理函数的类型:事件处理函数或事件侦听器,或者 on()
和 onClipEvent()
处理函数。
分配给事件处理函数方法和事件侦听器的函数(类似您编写的所有动作脚本函数)定义本地变量范围,但 on()
和 onClipEvent()
处理函数却不是这样。
例如,以下面两个事件处理函数为例。第一个处理函数是与名为 clip_mc
的影片剪辑关联的 onPress
事件处理函数。第二个处理函数是附加到同一影片剪辑实例的 on()
处理函数。
// 附加到 clip_mc 的父级剪辑时间轴: clip_mc.onPress = function () { var color; // 局部函数变量 color = "blue"; } // 附加到 clip_mc 的 on() 处理函数: on (press) { var color; // 无局部变量范围 color = "blue"; }
尽管这两个事件处理函数包含相同的代码,但它们具有不同的结果。在第一个例子中,color
变量对于为 onPress
定义的函数而言是本地的。在第二个例子中,因为 on()
处理函数没有定义本地变量范围,所以变量的范围为影片剪辑 clip_mc
的时间轴。
对于附加到按钮(而不是影片剪辑)的 on()
事件处理函数,变量(以及函数和方法调用)的范围是包含该按钮实例的时间轴。
例如,以下 on()
事件处理函数将产生不同的结果,这取决于它附加到影片剪辑,还是附加到按钮对象。在第一个示例中,play()
函数调用启动包含该按钮的时间轴的播放头;而在第二个示例中,play()
函数调用启动该处理函数所附加到的那个影片剪辑的时间轴。
// 附加到按钮 on (press) { play(); // 播放父时间轴 } // 附加到影片剪辑 on (press) { play(); // 播放影片剪辑的时间轴 }
也就是说,如果附加到按钮对象,play()
方法调用将应用于包含该按钮的时间轴,即该按钮的父时间轴。但如果将同一处理函数附加到影片剪辑对象,play()
将应用于包含该处理函数的影片剪辑。
在事件处理函数或事件侦听器函数定义内,相同的 play()
函数将应用于包含该函数定义的时间轴。例如,假定以下 MovieClip.onPress
事件处理函数是在包含影片剪辑实例 myMovieClip
的时间轴上定义的。
// 影片剪辑时间轴上定义的函数:
myMovieClip
.onPress = function () {
play(); // 播放包含该函数定义的时间轴
}
如果要播放定义 onPress
事件处理函数的影片剪辑,则必须使用 this
关键字显式引用该剪辑,如下所示:
myMovieClip
.onPress = function () {
this,play(); // 播放定义 onPress 处理函数的剪辑的时间轴
}
有关 this
关键字在事件处理函数中的范围的更多信息,请参见“this”关键字的范围。