AS2.0到AS3.0的变化

原文地址:http://blog.sina.com.cn/s/blog_4fe9d33b01010tsf.html

欣欣从小学四年级开始写Flash代码,从控制时间轴的play()到gotoAndStop(),再到后来相对复杂的if和random之类,一路上,flash和欣欣一起成长起来。AS2.0是幼稚的,没有形成系统、严谨而完善的编程语言,比如C,Java。虽然AS2.0由于简单的用法至今仍被部分人所喜爱,但是AS2和AS3正如傻瓜相机和单反一样经历着时代变迁,主流不得不接受新的事物,接受更加成熟专业的AS3.0。

欣欣承认,AS2到AS3的变化是巨大的。最初学会的语句,大部分已不能在AS3里使用。AS3不是个吸纳的过程,而是替换的过程,为了不破坏宏伟的编程大厦,所有不合时宜的朽木都被移除了。更大的变化体现在理念上,以往习惯把代码写在时间轴上,而众所周知c、java都是没有时间轴一说的,于是文档类横空出世。欣欣认为AS2的世界里,没有严格意义上的封装和模块化,前辈们的理想在AS3中终于实现。

IT是最变幻莫测的。欣欣还在用MX版本的时候,书本力荐target语句,并断言:说不定在将来,“对象.过程(参数)”的用法就被淘汰了。但事实是几年后,后者摇身一变成了最规范的写法,而前者几乎被欣欣遗忘了。

AS3.0是个崭新的开始,重头学过。 

附表:

注:“移除”表示AS3已不支持的写法。

ActionScript 2.0 ActionScript 3.0  标注
编译程序指令集
    
#endinitclip               移除  
#include                   移除                   参看类似的函数功能说明
 
常量   
false                      false                  布尔型对象默认值由undefined改为false
NaN                         NaN                   数值型对象默认值由undefined改为NaN
newline                    移除                   请使用转义字符串反斜杠与字母n(即\n)
null                                              null 对象与字符串类的默认值由undefined改为null.
undefined             undefined          undefined只用于未声明的变量,不是任何已声明对象的默认值
 
全局函数    
asfunction   flash.text.TextField的事件发送器:link   已被新的事件发送模型替代.你可以使用这
                           样的语法Event:而非asfunction:来达到相同的函数功能.当用户点击link(链接)
                           时,flash player将使用一个TextEvent.LINK的TextEvent事件对象,你的代码能通
                           过addEventListener()方法监听该事件对象.任何你打算包括的文本内容将在事件
                           对象的text属性中存放.
call()                   移除  
chr()                    移除  
clearInterval()         flash.utils.clearInterval()                   封装进flash.utils包中
clearTimeout()           flash.utils.clearTimeout()                   封装进flash.utils包中
duplicateMovieClip()    flash.display.MovieClip.MovieClip()       已被MovieClip类构造函数替代
eval_r()                 移除  
fscommand()           flash.system.fscommand()                   封装入flash.system包中,另外,参看
                                                                JavaScript/ActionScript通信的
                                                             flash.external.ExternalInterface类
getProperty()           移除                                     要访问直接属性,使用dot(.)操作
getTimer()             flash.utils.getTimer()                   封装进flash.utils包中
getURL()               flash.net.navigateToURL()                被navigateToURL()函数替代
getVersion()           flash.system.Capabilities.version     移入Capabilities类并改变为[读-写]属性
gotoAndPlay()    flash.display.MovieClip.gotoAndPlay()     此函数不再作为全局函数,但仍然可作为
                                                                   MovieClip类的方法
gotoAndStop()          flash.display.MovieClip.gotoAndStop() 此函数不再作为全局函数,但仍然可作为
                                                                   MovieClip类的方法
ifFrameLoaded()        flash.display.MovieClip.framesLoaded  
int()                   int()                从低迷状态恢复为新的整数数据类型提供转换功能的函数
length()                   String.length       此属性不再作为全局属性,但仍可用于String类的方法
loadMovie()           flash.display.Loader                      请使用Loader类
loadMovieNum()           flash.display.Loader                   请使用Loader类
loadVariables()           flash.net.URLLoader                   请使用URLLoader类
loadVariablesNum()           flash.net.URLLoader                   请使用URLLoader类
mbchr()                   String.fromCharCode()           已经移除.使用固定方式
                                                             String.fromCharCode()代替
mblength()                 String.length                  已经移除,使用String.length代替
mbord()                   String.charCodeAt()             已经移除,使用String.charCodeAt()代替
mbsubstring()           String.substr()                   已经移除,使用String.substr()代替
nextFrame()           flash.display.MovieClip.nextFrame() 此函数不再作为全局函数,但仍可用于
                                                                 MovieClip类的方法
nextScene()           flash.display.MovieClip.nextScene() 此函数不再作为全局函数,但仍可用于
                                                                 MovieClip类的方法
on()                   flash.events.EventDispatcher           已经移除.请使用flash.events包中新的
                                                                    事件处理系统
onClipEvent()           flash.events.EventDispatcher           已经移除.请使用flash.events包中新的
                                                                    事件处理系统
ord()                          String                    已经移除.请使用String类的方法
parseInt()                   parseInt()                  以0开头的字符串将被转换为十进制
                                                            而不是八进制.要转换为八进制,将数字8作
                                                                  为基本参数传入.
play()                   flash.display.MovieClip.play()           此函数不再作为全局函数,但仍可用
                                                                      于MovieClip类的方法
prevFrame()           flash.display.MovieClip.prevFrame() 此函数不再作为全局函数,但仍可用于
                                                                       MovieClip类的方法
prevScene()           flash.display.MovieClip.prevScene() 此函数不再作为全局函数,但仍可用于
                                                                       MovieClip类的方法
print()                   flash.printing.PrintJob                   已经移除.请使用PrintJob类代替.
printAsBitmap()           flash.printing.PrintJob                   已经移除.请使用PrintJob类代替.
printAsBitmapNum()           flash.printing.PrintJob                已经移除.请使用PrintJob类代替.
printNum()           flash.printing.PrintJob                   已经移除.请使用PrintJob类代替.
random()                   Math.random()                   已经移除.使用Math.random()代替.
removeMovieClip()           移除           将所有指向movie clip的映射设置为空(null),以便激活无用单
                                                               元收集程序
setInterval()           flash.utils.setInterval()        移入flash.utils包中.建议使用Timer类代替
setProperty()           移除                           用来设置可写的属性,使用dot(.)操作
setTimeout()           flash.utils.setTimeout()           移入flash.utils包中
showRedrawRegions() flash.profiler.showRedrawRegions() 移入flash.profiler包中
startDrag()           flash.display.Sprite.startDrag()   已不再是全局函数,但仍可用于Sprite类
stop()                   flash.display.MovieClip.stop()  已不再是全局函数.但仍可用于MovieClip类
stopAllSounds()           flash.media.SoundMixer.stopAll()  已不再是全局函数,但仍可用于SoundMixer
                                                                  类,它提供全局声音控制
stopDrag()                   flash.display.Sprite.stopDrag()   已不再是全局函数,但仍可用于Sprite类
substring()                   String.substring()               已不再是全局函数,但仍可用于String类
targetPath()           移除  
tellTarget()           移除                                  使用dot(.)操作或者是with声明
toggleHighQuality()           flash.display.Stage.quality    已经作为全局属性移除.使用Stage类代替
trace()                   trace()                           trace()方法接收逗号分界的参数列表
unloadMovie()           flash.display.Loader.unload()           已经移除.使用Loader.unload()
unloadMovieNum()           flash.display.Loader.unload()           已经移除.使用Loader.unload()
updateAfterEvent()           flash.events.TimerEvent.updateAfterEvent() 已不再是全局函数,但仍可用
                                                        于TimerEvent,MouseEvent,和KeyboardEvent类
 
全局属性    
_accProps                      flash.accessibility.AccessibilityProperties   被AccessibilityProperties类代替
_focusrect                     flash.display.InteractiveObject.focusRect     被InteractiveObject类的focusRect属性所代替
_global                         移除                                请使用类中的固定成员
_highquality                  flash.display.Stage.quality           被stage类的quality属性所代替
_level                          移除层的概念在Actionscript3.0中不复存在,作为补偿,AS3中提供对显示项目的直接控制权.参看flash.display包
maxscroll                     flash.text.TextField                      被TextField类中的maxScrollH和maxScrollV属性代替
_parent                      flash.display.DisplayObject.parent     由DisplayObject类中的parent属
                                                                                   性代替
_quality                     flash.display.Stage.quality                 被stage类的quality属性所
                                                                                   代替
_root                        flash.display.DisplayObject.stage        被移除.与之功能相近的Stage,
                                                                  是ActionScript 3.0显示的底层
scroll                        flash.text.TextField                          被移除.被TextField类中
                                                             的maxScrollH和maxScrollV属性代替
_soundbuftime         flash.media.SoundMixer.bufferTime     请使用SoundMixer类的bufferTime属性
this                           this                   与此方法关联的函数方法的调用将传入this所指的
                                          影片实例.因此,影片实例内部引用this方法将总是指向它本身.

操作   
add (strings的连接操作)                      移除                           使用连接符”+”
eq (strings判断相等)                         移除                           使用相等判别符”==”
gt (大于(strings))                           移除                           使用大于符号”>”
ge (大于等于(strings))                       移除                          使用大于等于符号”>=”
<> (不相等)                                  移除                           使用不等符号”!=”
instanceof                                    i                  虽然instanceof操作仍可用,但它只能
                                                                  检查原型类型,它不是唯一的此类方
                                                               法.使用is操作,可以检查一个对象是否
                                                                                 属于某种数据类型
lt (小于 (strings))                          移除                           使用小于符号”<“
le (小于等于(strings))                       移除                           使用小于等于符号”<=”
and (逻辑和)                                 移除                           使用逻辑和操作符”&&”
not (逻辑否)                                 移除                           使用逻辑否操作符”!”
or (逻辑或)                                  移除                            使用逻辑或操作符”||”
ne (不等于(strings))                        移除                            使用不等于操作符号”!=”
 
声明类型    
delete                 delete          delete操作只作用于对象本身的属性,不能用于含有引用的变量
import                import                           import不是随意可选的声明.要使用某个类,不论
                                                       使用的是不是合格的对象名,你都必须导入它.
intrinsic             移除                      ActionScript 3.0有一个相似但不相同的keyword叫
                                                native,它与intrinsic相同之处在于指引编译器不要
                                                编译函数体,不同在于native对于编译时的格式检查无效.
private                           private       ActionScript 3.0中private关键字指定某个标识符只在
                                                该类中可见,并且不扩展到子类中.不仅如此,
                                                ActionScript 3.0中的private关键字同时加强了编译
                                                时和运行时.
set variable                 移除                           使用指定操作符”=”
super                       super                           ActionScript 3.0中,在子类构造器中对
                                                            super()的调用无须作为构造体的首个声明.
 
访问类             flash.accessibility.Accessibility 
isActive()方法  flash.accessibility.Accessibility.active   由函数改为访问属性.名字由isActive改
                                                                        为active
updateProperties()           flash.accessibility.Accessibility.updateProperties()  
 
参数类                        arguments  
caller 属性                   移除          你可以让调用函数将arguments.callee作为参数传给被调函数
                                             来达到同样的函数功能.查看例子章节中有关
                                                   arguments.callee的范例.
 
数组类    
CASEINSENSITIVE常数                  Array.CASEINSENSITIVE         类型更改为uint
DESCENDING常数                         Array.DESCENDING            类型更改为uint
length属性                    Array.length                         类型更改为uint
NUMERIC常数                   Array.NUMERIC                        类型更改为uint
RETURNINDEXEDARRAY常数       Array.RETURNINDEXEDARRAY               类型更改为uint
UNIQUESORT常数        Array.UNIQUESORT                              类型更改为uint
Array构造器          Array.Array()                                 参数改变,使用余下的参数格式
push() 方法           Array.push()                                参数改变,使用余下的参数格式
sort()方法            Array.sort()                                可选参数的数据类型更改为uint
sortOn()方法          Array.sortOn()                            可选参数的数据类型更改为
                                                       uint.ActionScript 3.0版本下添加了额外的函数
                                                       功能,你现在能够将数组对象作为文件名参数传入
                                                      进行分组,如果你传入的可选参数为匹配数组那每
                                                       个分组区域都将有自己的匹配可选参数.
splice()方法       Array.splice() 参数可以是任何类型,但首选参数是int和uint.参数值将变为…参数格式
unshift()方法      Array.unshift()               参数值变为….参数格式.返回的数据类型更改为uint

发表评论

电子邮件地址不会被公开。 必填项已用*标注