ActionScript 3.0 演变成一门强大的面向对象的编程语言意味着flash平台的重大变革。这种变化也意味着 ActionScript 3.0 将创造性地将语言理想地迅速地建立出适应网络的丰富应用程序, 成为丰富网络应用(
Rich Internet Application)项目的本质部分。比较早期的ActionScript版本就已经提供了这种要求为创造真实地参与在线体验的力量和灵活性。ActionScript 3.0 将促进和发展这种性能, 提供发展强大表现和舒适的先进的高度复杂应用, 结合大型数据库以及可移值性的面象对象的代码。拥有 ActionScript 3.0, 开发者可能达到高效执行效率和表现同一的平 台。
ActionScript 3.0 基于ECMAScript, ECMAScript是所有编程语言的国际规范化的语言。ActionScript 3.0 同样遵从ECMAScript语言规范。
ActionScript 由嵌入在flash player的ActionScript虚拟机 (AVM)执行。AVM1, 是执行以前版本的ActionScript的虚拟机, 今天变的更加强大的flash平台使得可能创造出交互式媒体和丰富的网络应用。然而, AVM1却在挤压着开发者们的极限—— 他们的项目现在到了要求它变革的时刻了。ActionScript 3.0 带来了一个更加高效的ActionScript 执行虚拟机—AVM2, 它将彻底的脱胎换骨于AVM1 。 它将意味着, ActionScript 3.0执行效率将比以前的ActionScript执行效率高出至少10倍。
新的AVM2 虚拟机将会嵌入于flash player8.5当中, 它将成为执行ActionScript的首先虚拟机。当然旧的AVM1将继续嵌入在flash player8.5当中以兼容以前的ActionScript。
有众多的产品把自身的展示和应用表现于flash player当中,这些产品的动画也经常应用到ActionScript 以增加互动和行为表现他们的产品。 在Macromedia 产品家族, 专业设计师和也许使用 ActionScript 在几个产品当中, 譬如Macromedia flash, Flex, 和Flash media servers创造出内容和应用表现在flash player当中。在Flex2 产品家族, 包括最新的基于Eclipe—的Flex Builder 2 IDE,会是系列产品中第一个应用ActionScript 3.0 的新体验的产品。
ActionScript 3.0的目标:
我们需要ActionScript 3.0 提供一个先进的, 与编程模型一致的, 服从业界标准, 以及表现将数量级大于我们过去的执行效能。虽然ActionScript 3.0 代表着flash平台一个新的编程模型,它也将会是一个让开发者熟悉的基础的面对对象的编程语言。
ActionScript3.0的出现将展现出如下目标:
安全 – 它支持一定的安全以使得能够让开发者写出明白的, 容易的可维护的代码。
朴素 - 这种语言的直观程度使开发者能够直接读和写项目,而不需要经常参考手册
表现 - 这种语言使开发者写出高效率的和表现性强的复杂项目。
兼容性 - 这种语言抛弃不规范的语言标准以及提供向后兼容以及有意义的交替以符合业界标准。ActionScript 3.0 是规范化了的ActionScript 2.0, 增 加了ECMAScript 其中的XML应用(E4X) ,使得这 种语言融入ECMAScript整体连为一贯。
ActionScript 3.0的特征:
ActionScript 3.0 包括二部分: 核心语言和flash player API 。核心语言用于定义编程语言的结构, 譬如声明, 表示, 条件, 循环, 和类型 。flash player API是 由一系列精确定义flash player功能的类组成。
ActionScript 3.0 拥有尽可能的挖掘出计算机剩余性能的新特点。规则表示支持使操作性更加强大的XML。 ECMAScript for XML (E4X) 使得XML 成为通用数据类型, 将大大地简化XML 处理。新的Display ListAPI将使虚拟对象更加的协调一致。 规范化的DOM 事件模型使得那些对象的表示和响应结合的更加强劲。当然这些只是ActionScript3.0许多新的体验当中的一部分。
actionscript3.0语言特点:
ActionScript 3.0 的出现是ActionScript 2.0 的核心语言方面融入ECMAScript 以遵守其标准和引入新的改进的一些功能区域的结合。所有这些特点在ActionScript 3.0 语言参考中都有详细的介绍和讨论, 可得到试用版正在Macromedia 实验室。下面是一些其开发者对其方便的地方和用法总结的一些新特点。
增强处理运行错误的能力(增强异常处理的能力)
应用ActionScript 2.0时, 许多表面上“完美无暇”的运行错误无法得到记载。这使得flash player无法弹出提示错误的对话框, 就象javascript语言在早期的浏览器中所表现的一样。也就是说, 这些缺少的错误报告使得我们不得不花更多精力去调试ActionScript 2.0程序。ActionScript 3.0 引入在编译当中容易出现的更加广泛的错误的情形, 改进的调试方式使得能够健壮地处置应用项目当中的错误。提示的运行错误提供足够的附注(例出出错的源文件)和以数字提示的时间线, 帮助开发者迅速的定位产生错误的位置。
对运行错误的处理方式(异常处理方式)
在ActionScript 2.0中,运行错误的注释主要提供给开发者一个帮助,所有的帮助方式都是动态的。而在ActionScript且是3.0中, 这些信息将被保存到一定的数量,Flash player将提供时间型检查以提高系统的运行安全。这些信息将记录下来用于监视变量在电脑中的运行情况, 以使得开发者能够让自己的应用项目得到改进以减少对内存的使用。
密封的类
ActionScript 3.0 将引入密封的类的概念。在编译时间内的的密封类拥有唯一固定的特征和方法,其它的特征和方法不可能被加入。这使得比较严密的编译时间检查成为可能, 创造出健壮的项目。因而它当然可以提高对内存的使用效率, 因为不需要为每一个对象实例增加内在的杂乱指令。当然动态类依然可以使用只要声明为dynamic的关键字。
代理方式
在ActionScript 3.0中事件处理变的更加简化归功于它的嵌入式代理方式。而在ActionScript 2.0中, 方法关闭后并没有记住什么对象事例引用了它们, 当调用已经关闭的方法时将导致意想不到的后果。 Mx.utils.Delegate 类经常被使用,使用它时, 你写了代码如下:
myButton.addEventListener(“click”, Delegate.create(this, someMethod)); Delegate.create(this, someMethod)
在AS3.0中,这个类不再需要被引入, 当方法关闭时将自动地记住它的原始对象实例。现在, 你可以简单地写为:
myButton.addEventListener(“click”, someMethod);
ECMAScript 中的 XML (E4X)
ActionScript 3.0 特点之一是全面支持ECMAScript中的 XML (E4X), 最新的规范标准为ECMA-357 。E4X 提供一种自然, 流利的语言使得能够快速的构造XML 。而不是象传统XML的解析接口一样, E4X使得XML成为通用的数据类型。E4X 简化操作XML将大大的减少相当 数量的代码以适用应用项目需要的发展。在这个网站你能学到更多关于E4X 的规格:
www.ecma-international.org/publications/files/ECMA-ST/ECMA-357.pdf
规范的表达方式
ActionScript 3.0 引入支持通用规则使得能够迅速搜寻和快速的操作字符(串)。ActionScript 3.0实施规则定义在第三版的ECMAScript 语言说明书当中(ECMA-262) 。
命名空间(Namespaces)
Namespaces 是一种创新新机制用以控制声明的可见性。 Namespaces 与传统通过指定类型用以控制声明(公开的, 私有的, 保护的)是相似的 。他们本质是通过自定义路径, 能够使用你所选择的名字。Flex, 例如, 使用一mx_internal 命名空间为它的内部数据来源。命名空间使用统一的资源标识符(URI)以避免冲突 ,当与E4X一起使用时同样可以使用XML命名空间。.
新的整数类型
ActionScript 2.0用Number定义有单精度数字类型和双精度浮点数字类型。受欢迎的新的Int数据类型将加入到ActionScript3.0当中。int是一个32位有符号整型数据类型, 使得CPU将提高ActionScript代码中处理整数运算的能力,int将提高循环运算以及几乎其它不带小数点的整数运算。另一个新的数据类型是uint, 一个与int相似的无符号32位整数型 。uint 主要用于表现象索颜色和其它一些int所不能很好工作的领域。
Flash Player 接口的特点
Flash player API 由一组类和功能组成以增强flash player容纳actionscript语言的能力。这种功能是在ActionScript 核心语言和空余的flash平台间建立起了一座桥梁。这将能大大的提高flash应用程序的能力以及对于核心语言来说将起到重要的补充作用。这里没有足够的空间来对API的细节进行详细的描述, 但这里有一张短名单列出一些新的和有趣的功能:
(1):DOM3 Event Model
DOM3事件模型提供一个标准方式发生和处置事件消息以使得对象在应用之间能够互动和通信, 维护状态和对变化产生回应。仿造 W3C DOM3 事件规格, 这个事件模型能够带来比早期的ActionScript版本中的系统事件更加清晰和高效的机制。 Flex程序构架应用和flash player API相同的DOM3事件模型,以至于系统事件从flash平台的顶端走到了末路。
(2):Display List API
显示屏的接口(API)由一组相关的能够表现出简单而生动flash动画的类组成。
新的(Sprite:调皮的,精灵之意。暂且译为闪灵)
闪灵类是一个轻量级选手,与MovieClip类相似,但比较适合于作为UI组件的基本类。新的形状类将取代旧的矢量形状。这些新的类能够应用新的操作方式自然的表现并且能够在任何时候都比自己的前辈(指旧的类和旧的方式)展现的更加有活力。
不再需要为对象指定深度。深度管理现在在flash player当中是自动建立的。新方法提供了可以为对象指定和管理Z轴。
当然, 这个ActionScript 3.0 概要只概述一些扣人心弦 的API的介绍 以及语言特色。当你更加深入学习AS3.0的时候你将发现更多 。当你想学习ActionScrip3.0如何实现应用项目设计时
<<ActionScript 3.0编程 >>一书里将是你好的开始。 当然
<<ActionScript 3.0 语言参考>>
ActionScript 3.0 Language Reference)是AS3.0核心语言完整描述和flash player API细述的权威资料. 当然, 如果你已经对 ActionScript 1.0 或2.0比较熟悉,请查阅
《ActionScript 3.0的新特点》((
Tips for Learning ActionScript 3.0. ) 。
Flash player的开发者非常兴奋能够在第一时间传递出这份语言预览, 它的新能力和改进的表现性能通过了Macromedia 实验室的试验。你能够嗅觉到 ActionScript 3.0将带入到Flex Builder 2,Flex Framework以及Flash Player 8.5当中。我希望你们能够和我们一样为flash 平台的未来而感动。 并且我们期待着你们在试验当中的反馈。(
完!!
作者: Flash Player工程主管:Gary Grossman。
Flash player高级产品经理人:Emmy Huang 。
[center]学习ActionScript 3.0的新特点[/center]
翻译: 钟衡 蓝色理想---->经典论坛
ActionScript3.0 是一种类型安全,适应标准,面向对象的语言,代表着flash 播放器中的新的程序模型。 如果你已经熟悉ActionScript 1.0或者2.0, 所以当你用 ActionScript3.0开发应用程序时应该注意到它的一些不同点.
为了帮助你轻松过渡到ActionScript3.0,我们开始列出一些信息以及一些在开发过程中你有可能遇到的问题。另一个有关ActionScript 2.0与ActionScript 3.0的API比较的有用资源在《ActionScript 3.0 语言参考》内可以查询到。
1. 必须为所有的变量,参数和返回值定义数据类型。
为所有的变量,参数和返回值定义数据类型被认为是一个极好的习惯, 并且能够帮助编译器给你更有帮助的错误提示。因为在运行前虚拟机就已经知道了它(变量,参数和返回值)的数据类型所以它(定义数据类型)也能够使得在运行时表现的更好。 实际上,因为我们认为这很重要所以在默认情况下我们会给出一个警告!(指未定义数据类型)
2. 如果没有声明路径,它将默认为一个内在的,而不是公开的。
声明的默认路径将由私有的起而代之(公开),意味着那些定义可见在只包含那些定义的那些包,而不是所有的代码。 这与诸如Java的其它一些些语言是相同的。因为ActionScript2.0的声明默认为公开, 这可能成为一个明显的漏洞,因此我们建议你为你的声明建立一个路径以至于它是透明的(意思就是说某些企图是徒劳的).为了鼓励这种好习惯,当没有声明路径时,ActionScript3.0编译器将弹出一个警告!
3. 类被默认为是密封的,意味着扩展的特性将不能够在运行当中加入。
类现在可以是动态的或者密封的。 动态的类能在运行当中增加另外的动态的特性;密封的类则不能。密封类保存在存储器当中因为不需要其它的杂乱信号,并且编译器能提供更好的错误反馈。 如声明class Foo,它是密封的。如果声明一个动态的类,请使用dynamic关键字, 例如dynamic class Foo。
4. 如果需要引用一个包中的类,现在它是包含在包当中来引用。
包的关键字对ActionScript 3.0来说是一种新的方式。 ActionScript 2.0 代码为: class mx.controls.Button {... }。ActionScript 3.0 代码:package mx.controls {class Button {. .. }}
如同ActionScript 2.0,一个公开类的文件名与类的名字是相同的。若干个类可能放在同一个独立的文件夹中,但是只有一个类是公开的,并且它的名字必须与文件名相匹配
5. 类必须导入,即使是那些提及到类
使用MyPackage.MyClass类,你必须导入MyPackage.*; 或者导入MyPackage.MyClass;这是必须的即使是那些提及到的类,列如使用全名MyPackage.MyClass。 在ActionScript 3.0中,被导入的文件表明你想使用来自于另一个包的类,而在ActionScript 2.0中它只是一个简写。 在ActionScript 3.0中,完整的类名称用于消除模棱两可的情况,而且不会是导入文件方式的替代方式。
6. 覆盖方法必须标记为override
Override关键字使得避免了覆盖方法中的一个明显缺陷, 譬如为一个覆盖方法指定了错误名字或方法署名, 或者当这个覆盖方法的名字改变时。并且它可以通过查询代码清楚的看到一个方法已经被覆盖。因为它可以清楚的知道一个方法是否覆盖了另一个方法, 对于编译器编译能够得到有效的确认。Override关键字是受到了C#中的override关键字的启发。
7.外加的(属性)应该作为强制性数据项目,而不是对象的属性。
对象匮乏的安全类型将可能导致意想不到的错误,所以编译器也将给出一个警告。绑定某对象的属性,比如selectedItem.name, 将导致一次警告; 你需要使用强制性数据项目,比如,EmployeeInfo(selectedItem).name 。
8.函数必须定义返回值。
这样做是为了安全的数据类型, 所以你不能落下定义任一个返回值的数据类型或者为一个对象取得默认的类型。如果一个函数没有返回任何值,声明它返回一个空值。
9.代理方式将在建立,使得事件派遣变得更容易
在ActionScript 2.0, 寻址事件对方法要求使用mx.utils.Delegate类或者其它的
import mx.utils.Delegate;
myButton.addEventListener(“click”, Delegate.create(this, onClick));
在ActionScript 3.0, 提及到的方法将自动的记住它所涉及到的对象实例。 实质上,这是一种自动的代理。 所以,代码可能简单地被写成:
myButton.addEventListener(“click”, onClick);
10. 间接引用空值或未定义值的忽略将不会被忽略。
间接引用空值或未定义值在以前的ActionScript 中会被忽略了和或者告知未定义。 现在, TypeError 的忽略将不会被忽略。 应该注意代码中存在空值或未定义值, 以及无声息中导致的失败。新的不忽略机制适应了ECMAScript 规格。
11.编译将于命令行的堆栈形式进行并且调试过程中将出现文件名以及行的进度
当一个运行错误发生, 对话框将描述出这个错误并且显示出哪里出的这个错误。 使用详细的说明以及调试工具的选择将能够使你更加简单的定位到出现错误的地方.
12. 属性不再是默认的被绑定。(Properties are no longer bindable by default.)
如果属性需要绑定你必须用[Bindable]元数据标记。(You must declare them to be bindable by using the [Bindable] metadata tag.)
13. Flash Player API 被改组在一个包中
以前, Flasy PlayerAPI中的所有类和函数是全局的, 现在,它们被放在了包当中,比如flash.display,flash.events,flash.ui。 例如, MovieClip 放在了flash.display.MovieClip, trace(),getTimer() 和setInterval()被放进了flash.util包当中。
14. 新的时间类为时间事件提供了一个比setInterval/setTimeout函数更加纯正的机制
新的时间类比setInterval体现出了更多的优点, 比如不需要一个时间间隔,并且更加先进, 面向对象的界面。我们认为用时间类替代setInterval/setTimeout是一个良好的习惯。
15. Event已经作为一种强制, 而且必须是一个新的事件类的子类。
这意味着你能不再使用类对象的一个普通事例来派遣一个事件, 并且你不可能使用对象简写制方式, 即 { type:”customEvent” } 。不是创建一个普通对象, 现在你需要使用Event class。
如果你想获得其它的属性你需要通过建立子类事件。 这样的做法是为了使得数据类型能够更安全和更有效。
16. 视觉原理扩展了DisplayObject,你可以象定义其他类一样定义它们. 显示列表开始用addChild()来动态地增加组成部分。
结果, createChild() 已经不被提倡使用。虚拟的实体, 包括TextField, 能够象其他对象一样来展示并且用addChild() 或者addChildAt方便地加入到显示列表中 。注意这还涉及到其它一些APIs, 譬如createEmptyMovieClip() 和 createTextField()已经成为过去式。 为了创造新的TextField你可以用”new TextField()”来代替”create TextField()”。
17. E4X (ECMAScript 为XML) 被推荐在flash中用来处理XML。
ActionScript中的E4X变的更加强大和完整,提供给了计算机一种新的能力。以前的flash XML类依然可以用来使用。 如果你更喜欢以前的XML API, 改称为XMLDocument, 它被放在flash.xml包中。
18. 当使用E4X时, toString方法已经不能用来标记整个对象返回全部的XML; 如果需要获得它,应该使用toXMLString method.
toString方法可以用于返回XML对象中某段字符。 它已经不能用于记录整个的XML对象。 如果需要获得标记的XML,使用toXMLString方法。
19. For…in 的循环语句已经不能够用来列举一个类中的属性和方法;它只能够用来列举一个对象中动态的属性。
ActionScript 3.0以一种新的和比较先进的机制描述内在的属性和方法, 叫做describeType 。在ActonScript 3.0中是用describeType描述内在的属性和方法。
20. 你能够用你所定义的一个类的实例来作为一个SWF对象。
在ActionScript 2.0中, SWF对象总是MovieClip类 。在ActionScript3.0, 它可能会是Sprite类的子类。 你可以为DocumentRoot中的SWF文件定义一个类 。当SWF已经下载完成时,它将代替这个类作为最终对象。
翻译:衡-----------
蓝色理想——经典论坛