ActionScipt技法和研发中会碰到的问题

更新时间:15-09-15 22:52 热度:554
 

英文原文:《Tips for learning ActionScript 3.0》
原文地址:http://www.adobe.com/devnet/actionscript/articles/actionscript_tips.html
译者:Dreamer。

学习ActionScipt的一点提醒
ActionScript 3.0是一种坚强雄厚的面向对象语言,它为Flash Player描画了一种新的编程板型。假如你已经对ActionScript 1.0或2.0很知道得清楚,那末当你运用ActionScript 3.0研发你的第1个应用手续的时刻需求晓得一点语言区别。
注:更多资料,请参照Flex 2.0 Language Reference中ActionScript 2.0 和ActionScript 3.0之间的不一样点的列表。
为了帮忙大家更容易地过渡到ActionScript 3.0,我编辑了下边的列表,那里面涵盖技法和你有可能在研发中会碰到的存在广泛的问题。

为全部变量,参变量和回返值声明类型。为全部变量,参变量和回返值声明类型不是务必的,不过它被觉得是最好的习性。它将会帮忙编译器给你更多地有用的不正确信息。它还会加强运行时的性能,由于虚拟机将会觉得你事前晓得你所做的办公。其实,它是这么关紧所以假如你没有声明我们会给出一个警告。
注意如今没有过访形式的声明都默许是internal形式,而不是public。如今默许的过访形式是internal而不是public,这就是说这个声明只对包括这个声明的包可见,而不是对全部代码都可见。这一点儿和其他一点语言相完全一样,譬如JAVA。由于ActionScript2.0的声明默许为是public,这个变动将很有可能导致存在广泛的不正确,所以请老是在声明面前加向上级反映问形式,让你的意向更加明白。为了激励这个好习性,ActionScript 3.0编译器将在没有过访形式声明的时刻给出一个警告。
注意类都是默许为封装(sealed)的,也就是说不可以在运行时动态地添加属性。如今类可以是动态的(dynamic)还是封装的(sealed)。动态(dynamic)类可以在运行时添加动态属性;封装(sealed)类不可以。由于不必内里哈希表来保留动态的属性,封装(sealed)类占用内存少,并且编译器可以对它供给更好的不正确反馈。Class Foo这种声明就是封装(sealed)的。要声明一个动态(dynamic)类,就运用dynamic关键字——譬如,dynamic class Foo。
运用包(package)声明把一个类放到一个包(package)里边。Package是ActionScript 3.0中一个新的关键字。
ActionScript 2.0 代码:

class mx.controls.Button { … }
ActionScript 3.0 代码:

package mx.controls { class Button { .. } }
在ActionScript 2.0中,一个public类务必放在一个文件名和类名相同的文件中。多个类有可能在同一个文件中声明,不过只有一个类有可能是public,况且这个类的姓名务必日文件姓名相同。
导入类,纵然对这个类的援用都是绝对合法的。要运用MyPackage.MyClass类,你务必导入它:
import MyPackage.MyClass;
你务必这么做既然全部的援用都是绝对合法的,况且要运用完整的姓名MyPackage.MyClass。在ActionScript 3.0中,import语句表明你想要运用一个来自额外一个包中的类,而在ActionScript 2.0中,它只是用来帮忙记忆类名。在ActionScript 3.0中,完整的类名只是用来消弭多种意思,而不再是import语句的代替品。
也可以运用 * 通配符来导入一个包中的全部类。

import MyPackage.*;
单个地导入类被觉得是一个好习性,由于这么更明确地表清楚你的代码运用了哪个类。
始末标记办法的覆写。Override关键字可以帮忙防止覆写办法时不时见的不正确,譬如对一个掩盖写得办法定义了不正确的姓名还是掩盖写的办法的姓名变更造成的不正确。这么做会使里面含有有覆写办法的代码看起来更清楚。由于编译器能够晓得一个办法是否打算覆写额外一个,它就能执行更好的查缉。ActionScript 3.0中的override关键字是从C#的override关键字中取得的灵感。
在函数中定义回返类型。为一个函数定义回返类型是一个好习性。假如你疏忽了回返类型,会显露出来一个警告。这是为了类型的安全性,这么一来你就不会无意中没有写回返类型而获得默许的Object回返类型。假如一个函数没有回返不论什么值,将它的回返类型声明为void。
注意,delegate如今被定义到达语言里,要得事情分派更简单。在ActionScript 2.0中,把事情指向到一个办法需求运用mx.utils.Delegate 类还是其它的办公:
import mx.utils.Delegate;
myButton.addEventListener(”click”, Delegate.create(this, onClick));
在ActionScript 3.0中,办法的一个援用会半自动记取它援用的对象实际的例子。这被称为method closure。实质上来说,这就是一个半自动的delegate。所以,代码可以简单地写成:
myButton.addEventListener(”click”, onClick);
如今去掉消除一个门里出身还是undefined的援用将会抛出一个异常。去掉消除一个门里出身还是undefine的援用在曾经的ActionScript中会被疏忽况且定义援用为undefined。如今,一个TypeError异例会抛出。小心防备无意中去掉消除的门里出身或undefined援用,况且有赖这个报告陈述不正确的特别的性质。这种新的抛出异常的特别的性质与ECMAScript定义一致合。
运用-verbose-stacktraces和 -debug选项。运用指示行选项-verbose-stacktraces和-debug编译可以使文件名和行号显露出来在Flash Player的警告框中。当一个运行时不正确发生时,一个会话框会描写这个不正确况且列出它发生不正确的地方的调配使用堆栈。运用-verbose-stacktraces和-debug选项可以让在源代码中定位不正确变得简单。
显式声明bindable属性。属性不再默许为bindable。你务必运用[Bindable]元数值标签来声明他们为bindable。
注意Flash Player API被从新团体到达包里。曾经Flash Player API中全部的类和函数都是整个的局面:胸怀~的。如今有了很多包,象flash.display, flash.events, flash.ui以及其他。举个例子,MovieClip如今是flash.display.MovieClip况且getTimer 和 setInterval都被放进了flash.utils 包中。
运用新的Timer类,而不是setInterval/setTimeout。与setInterval/setTimeout函数相形,新的Timer类为timer事情供给了更清楚的机制。新的Timer类与setInterval办法相形有众多优势,譬如不必处置ID数码间隔,还有一个更好的,面向对象的接口。我们把运用Timer而不是运用setInterval和setTimeout看作是一个好习性。
明确承认事情(event)是秉承而来的。如今事情(event)是强类型的,况且务必是新的Event基类的子类。新的Event类让事情整体体系更加清楚和管用。不过,这也意味着当分派事情的时刻你不可以再运用Object类的通用实际的例子了,况且你不可以运用对象的书契简写——例如,{type: ‘customEvent’ }。
你如今需求运用Event类(例如,dispatchEvent(new Event (’myCustomEventType’))),而不是开创一个通用的Object类。假如你想要传交附带加上的属性就需求从Event秉承。不运用Object的动因是为了取得更高的类型安全性和速率。
注意可视的元素务必秉承自DisplayObject,况且你可以像其他类同样定义他们。组件如今经过new动态开创况且运用addChild被添加到显露列表中。所以,不激励运用createChild。可视化的实体,涵盖TextField,可以像其他对象同样实际的例子化况且运用addChild或addChildAt简单地添加到显露列表中。注意,这意味着一点API消逝了,譬如createEmptyMovieClip 和 createTextField。你可以运用new TextField而不是运用createTextField来开创一个新的TextField。
如今在Flash中引荐运用 E4X (ECMAScript for XML)来操作XML。E4X与曾经的Flash XML类相形十分坚强雄厚况且更好地整合进了语言中,它还供给了众多新的性能。曾经的Flash XML类依旧可以运用。假如你喜欢用曾经的XML API,它就在flash.xml包中。它依旧可用只是从新起名称成了XMLDocument。
当运用E4X的时刻运用toXMLString办法。toString办法没有作为对象回返完整的XML标记;假如你想取得,运用toXMLString办法。toString办法为XML对象回返一个简单的字符串。它并不会绝对将XML对象序列化。要取得XML标记,请调配使用toXMLString办法。
For……in循环将不再枚举类中声明的属性还是办法。它只枚举一个对象的动态属性。ActionScript 3.0特别的性质中有一个针对对象自省的新的先进机制,叫做describeType。在ActionScript 3.0中运用它来自省对象。
如今一个SWF文件的根对象可以是你自主挑选的一个自定义类的实际的例子。ActionScript 2.0中,一个SWF文件的根对象老是MovieClip的实际的例子。而在ActionScript 3.0中,它可以使Sprite的恣意子类。你可以设定一个类作为一个SWF文件的DocumentRoot。当其加载时,SWF文件会将它实际的例子化而后将其作为自个儿的根对象。
尤其拜谢我们的研发组织为这篇文章提出提议。这处列出的决不是纤悉的,不过它是一个起点,可以帮忙你打好学习ActionScript 3.0的基础。假如你知道得清楚其他的面向对象的语言,你有可能发觉这些个提醒只是一个温习——温习你已经在其他地方学习到的况且可以迅即在ActionScript 3.0中运用的技法。
假如你对ActionScript 3.0和面向对象编程是一个生手,那末这些个提醒将会派得上用途。对你来说,这就是一个简单的可以帮你强化知识的列表。编码舒畅!