读懂以下的Flex应用程序错误代码1000代码,并在代码中有下划线的位置添加适当的MXML或ActionScript代码

flex的一些总结 - 推酷
flex的一些总结
Loader与URLLoader,SWFLoader
(1) Loader
Loader 类可用于加载 SWF 文件或图像(JPG、PNG 或 GIF)文件。 使用 load() 方法来启动加载。 被加载的显示对象将作为 Loader 对象的子级添加。
(2)URLLoader
URLLoader 类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。 在下载文本文件、XML 或其它用于动态数据驱动应用程序的信息时,它很有用。URLLoader 对象会先从 URL 中下载所有数据,然后才将数据用于 ActionScript。 它会发出有关下载进度的通知,通过 bytesLoaded 和bytesTotal 属性以及已调度的事件,可以监视下载进度。在加载非常大的视频文件(如 FLV 的视频文件)时,可能会出现内存不足错误。
区别:一个用来加载可显示数据,一个用来加载非显示数据因为loader是继承与容器类的,所以首先它是个容器,而URLLoader 是继承与EventDispatcher,它不是容器URLLoader 类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据,在加载非常大的视频文件(如 FLV 的视频文件)时,可能会出现内存不足错误,返回的数据在data属性里面而loader多加载图片,swf等可视化对象,加载后作为唯一的子对象显示在列表上。
Loader: 多用于swf,图片(jpg,png,gif)
URLLoader: 多用于文本文件(xml,php,jsp…)
loader.contentLoaderInfo.PLETE, loadComplete);
private function loadComplete(event:Event)
trace(&done&);
addChild(loader);
//URLLoader:
xmlLoader.dataFormat=URLLoaderDataFormat.TEXT;
xmlLoader.PLETE,xmlLoaded);
private function xmlLoaded(event:Event) {
myXML = XML(event.target.data);area.text=myXML;
}catch (e:TypeError)
area.text=&Load faild:\n&+e.
在使用Loader来加载数据时,添加侦听事件时,注意一定要给Loader的 contentLoaderInfo属性增加事件,而不是给Loader对象增加事件。
var loader:Loader = new Loader();
loader.contentLoaderInfo.PLETE, completeHandler);
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
(3)可以使用SWFLoader和Loader两个类来加载子应用程序,多数情况下我们使用SWFLoader。它是Loader的一个包装类,提供了很多附加功能,使加载子应用程序更简单。
SWFLoader有如下特征:
支持flex的样式和特效;而Loader类却不支持任何固有的样式和特效。
方便管理加载进度;如果使用Loader则首先要获取LoaderInfo引用。
是一个UIComponent组件。SWFLoader它自己管理了所有子显示对象,不需要添加多余的代码。
自动缩放显示内容的大小
可以加载Application以外的实现类,如果检测到不是一个Application,会自动进行处理。
可以处理不同的版本。Loader不支持加载不同的编译版本
当使用Loader加载不是受信任区域的swf时,必须提供一个遮罩来重新定位,否则它会显示在屏幕外面:
import flash.display.*;
import flash.net.URLR
var rect:Shape = new Shape();
rect.graphics.beginFill(0xFFFFFF);
rect.graphics.drawRect(0, 0, 100, 100);
addChild(rect);
var ldr:Loader = new Loader();
ldr.mask =
var url:String = &http://www./content.swf&;
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
addChild(ldr);
SWFLoader加载外部swf是一个很好的方法,在进行Flex游戏开发的时候,我们通常会需要很多Flash提供的游戏角色,这些角色可以每个都是一个单独的swf,也可以是存在于一个swf文件中的各个元件。两种方法各有优劣:
1. 单独的swf,每个角色独立性很强,可以在需要的时候才加载。未来修改角色也不会影响到其它角色。但是会有很多的swf需要管理。
2. 每个角色是一个元件,存在于一个swf中,这种方法比较容易管理资源,比较干净。但是修改一个角色都需要重新编译swf,可能会误操作影响其它的元件。而且一次加载所有角色,可能会加载许多不必要的元件,浪费带宽。
两种方法怎么选择,根据项目读者根据以下几个问题考虑:
1. 你的所有元件相互之间是否又很多公用元件?如果是的话,可以考虑放到一个swf中,因为这样会降低所有元件的文件量。
2. 你的所有元件是否都继承同一些类,实现同一些接口,调用同一些类?如果是的话,可以考虑放到一个swf中,这样比较容易管理类包,而且降低swf的文件量,因为共有的类只编译一次。
3. 你的所有元件是否完全独立,没有任何关系?如果是的话,你可以考虑每个角色独立的swf。
具体实现代码如下:
&?xml version=&1.0& encoding=&utf-8&?&
&s:Application xmlns:fx=&/mxml/2009&
xmlns:s=&library:///flex/spark&
xmlns:mx=&library:///flex/mx& minWidth=&955& minHeight=&600&
creationComplete=&init()&
&fx:Declarations&
&!-- Place non-visual elements (e.g., services, value objects) here --&
&/fx:Declarations&
&fx:Script&
import mx.controls.SWFL
import mx.core.UIC
private var swfLoader:SWFLoader = new SWFLoader();
private function init():void{
swfLoader.PLETE,swfLoadComplete);
swfLoader.load(&assets/fishmomo.swf&);
private function swfLoadComplete(e:Event):void{
* 将整个swf都加载到flex舞台上
* 此方法将每个flex要用的资源做成单独的swf,需要时才加载进来
addElement(swfLoader);
var swf:MovieClip = swfLoader.content as MovieC
//fish 是 swf主舞台上的一个鱼对象,属性命名为fish
//调用舞台上fish元件的say方法
swf.fish.say(&Load a swf&);
* 此方法可以把所有的flex要用的资源放到一个swf中
* 把需要在flex中使用的元件链接到一个类,并将此元件拖到flash舞台
* 通过类名,随意显示其中一个元件到flex舞台
var FishSymbol:Object = swfLoader.content.loaderInfo.applicationDomain.getDefinition(&Fish&);
var f:MovieClip = new FishSymbol() as MovieC
//调用元件的say方法
f.say(&Load a symbol within a swf&);
var ui:UIComponent = new UIComponent();
ui.addChild(f);
addElement(ui);
&/fx:Script&
&/s:Application&
导致内存泄露的一些情况:
事件监听:
对父级对象加了监听函数,会造成内存泄露,例:
override protected function mouseDownHandler(…):void {
systemManager.addEventListener(“mouseUp”, mouseUpHandler);
在销毁对象的时候,remove掉这些监听,虽然弱引用也可以避免这些问题,但自己掌控感觉更好。
但以下几种情况不会造成内存泄露:
弱引用:someObject.addEventListener(MouseClick.CLICK, handlerFunction, false, 0, true);
对自己的引用:this.addEventListener(MouseClick.CLICK, handlerFunction);
子对象的引用:
private var childObject:UIComponent = new UIC
addChild(childObject);
childObject.addEventListener(MouseEvent.CLICK, clickHandler);
总之…有addEventListener,就removeEventListener一下吧,要为自己做的事负责~哈哈
remove掉子对象后并不会删除该对象,他还保留在内存中,应该将引用设置为null
removeChildren(obj);
Class (或MXML)中有:
public static var _eventService : MyService=new MyService();
解决:在dispose时,需要设置:
_eventService =
module (未解决)
moduleLoader unloadModule后
ModuleInfo 并不会被GC.
Garbage Collection in a MultiCore Modular Pipes Application
这篇文章介绍了一种GC策略,感觉对于ModuleInfo 的GC无效。
(未尝试、未遇到)
module 中如果使用了shell的CSS定义或是&mx:Style& 这样的定义,那么这个module将不能GC.
弹出的窗口应该是同样的结果.
解决方法,使用动态CSS文件
module init中
StyleManager.loadStyleDeclarations(“css/myStyle.swf”);
module dispose中
StyleManager.unloadStyleDeclarations(“css/myStyle.swf”);
TextInput/Textarea(未解决)
如果module中有window使用了TextInput/Textarea控件,不点击没有问题,只要点上去,那么很遗憾了,module和所在窗体将不能被GC.
这个BUG非常严重,目前还没有解决方法。
memory leak when using TextInput and TextArea when click the keyboard 这里面附加的解决方法无效。
通过profiler分析,应该和Focusmanager有关,只有一点击就不会释放。
CursorManager.setCursor
cursorID = CursorManager.setCursor(iconClosed);
dispose时要
CursorManager.removeCursor(cursorID);
如果使用Bitmap,结束时需要调用其dispose方法,否则内存消耗巨大。
另外,BitmapData是可以共享使用的,多个Bitmap可以使用同一BitmapData,节省不少内存。
var bmp:Bitmap =new Bitmap();
if (bmp.bitmapData!=null) {
bmp.bitmapData.dispose();
包含了Image对象时,在removeChildren时会造成不能释放(测试多次,结果不一,建议还是做如下处理)。
img.source =
this.removeChild(img);
Loader、SWFLoader、声音、视频、Effect等…
如果是加载SWF文件,先停止播放。
停止声音的播放
停止正在播放的影片剪辑(Movieclip)
关闭任何连接的网络对象,例如Loader正在加载,要先close。
取消对摄像头或者麦克风的引用
取消事件监听器
停止任何正在运行的定时器,clearInterval()
停止任何Timer对象,timer.stop()
停止正在播放的效果(Effect)
binding也疑似有memory leak 问题。
引用以及内存泄露相关博文和资料:
/aharui/2007/03/garbage_collection_and_memory.html
//kick-starting-the-garbage-collector-in-actionscript-3-with-air/
/janyou/archive//1340753.html
/articles/archives/2008/05/understanding_m.php
总结:由于之前Flash一直是在网页上使用,一般网页都是看完就关掉的,估计Adobe在内存回收这块也没有下太大的功夫,
现在AIR的出现使得内存管理也相当重要了,并且,AIR本身对内存的消耗就相当大,一个没有任何内容的初始创建的AIR程序,就得占掉10-20M+的内存…AIR还需改善.
为什么要模块化;模块化提供了分离应用程序代码到不同的swf文件上以便减少下载时间和文件大小。
使用Modules的好处是:
1. 主应用程序开始时不需马上下载modules。应用程序会根据需求载入和卸载modules。
2. 由于每个modules独立于其他应用程序modules,当需要改变一个modules时,你只需要重编译这个modules而不是整个应用程序。模块化可创建模块化应用程序是提高Flex框架性能的重要方面,提供更多能力控制下载时间和文件大小,使用modules,你可以根据哪些可被独立载入,哪些可被其他程序使用而分离应用程序代码。
优点是合理分割了主Application,模块化开发。更小的SWF文件体积,配合RSL和延迟加载策略,大大减少用户等待时间。
缺点就是容易引起内存泄露。
RSL(Runtime Shared Library),即运行时加载库。当前L主要有3个级别的RSL,一个是Standard RSL(即一个网站内共享),一个是Cross-domain RSL(跨域共享),最后一个也是最关键的是Framework RSL(Flex框架共享)。
Flex Builder在默认情况下,编译的每个程序都是独立的。每个程序都包含了所需类的一个副本,例如:在多个程序中都用到了VBox这个控件,那么每个程序都要独立的拥有一个VBox类。由此造成了程序代码的重复,使得代码量增大很多。而RSL正是解决此问题的一种方法,它可以把共享代码提取出来,然后在相同域的程序之间进行共享。这些共享代码不会再编译进程序,而是放在单独的库中,供运行时加载。另外,RSL也可以在客户端进行缓存,因此不需要在每次使用程序时重复下载。
RSL(Runtime shared libraries)即动态链接库,在程序运行时由FlashPlayer动态加载。静态链接库是SWC文件,通过编译器的library-path和include-libraries
编译进应用程序。采用静态链接的应用程序SWF会产生比较大的文件以及更长的下载时间。使用RSL的应用程序载入时间短且文件比较小,而且提高了内存使用效率,只是
在开始需要花点时间下载RSL。RSL的强大体现在多个应用程序共享公共代码时,因为RSL只需要被下载一次,多个应用程序动态链接到相同的RSL,访问其中已经缓存在客
户端的资源。
(1).在项目文件夹中点右建,选择”properties”-”Flex Build Path”-”Library Path”
(2).该选项卡上我们看到”FrameWork linkage”,默认是”Merged into cdoe”(FLEX4默认是RSL)
(3).点开下拉,选择”runtime shared library(RSL)”
(4).针对自定义的SWC,修改其link type为RSL,选择None,同时勾上Automatically extract swf to deployment path(自动将SWF提取到部署路径)。如果想对不同域的RSL共享,则选择Digests(摘要),同时指定其Policy file url(策略文件)。具体可参考FLEX SDK中的SWC文件处理方式。
(5).点击OK
SWC 文件是类似 zip 的文件。静态链接库是SWC文件,通过编译器的library-path和include-libraries编译进应用程序。新建Flex Library Object或使用compc命令可以制作SWC。
E4X是在ECMA-357标准中定义的,并成为AS3的一部分。优点是提供更简明和可读性强的语法从XML中查找和提取数据。
profile工具
可以很方便地观察对象的创建和销毁,帮助检查内存泄露问题。
FlexUnit – Flex单元测试框架
1、flex生成出来的文件都是很大,请问你用什么办法进行缩小呢?
(3)外部加载资源
2、做一个flex项目,你认为成功的要素在哪呢?
(1)数据和需求等传统软件项目的成功要素
(2)模块化开发,MVC框架
(3)swf文件减肥,运行效率,内存泄露问题,前台优化
(4)开源组件的使用
3、flex 前端的性能优化
(1)、避免容器的多级嵌套,减少相对尺寸、相对定位的使用。
(2)、尽量使用轻量级的容器
(3)、避免使用大体积的组件,比如DataGrid、AdvancedDataGrid
(4)、处理数据时多用分页的方式
(5)、少使用setStyle
(6)、使用延迟实例化加载子组件
4.Embed绑定图片有什么缺点?
答:直接编译到swf文件中,造成其体积过大。而且由于嵌入代码中,维护不便。
5、flex里调用JS措施?
答:直接在AS中利用ExternalInterface.call()来调用JS措施。如:
import flash.external.ExternalI
ExternalInterface.call(&JSFunction&);
ExternalInterface.call(&JSFunctionWithParameters&,&myParameter&);
var result:String=ExternalInterface.call(&JSFunctionWithReturn&);
6、用JavaScript调用ActionScript函数
答:利用ExternalInterface.addCallback在JavaScript里设置对Flex的回调措施并且在JavaScript里调用ActionScript措施。
ExternalInterface.addCallback(&function1&,callback1);
privatefunctioncallback1():void
Alert.show(&callback1executed&);
container[swf].function1();
6、FileReference
browse(typeFilter:Array = null):Boolean//揭示一个文件博览对话框,让用户抉择要上载的文件。
cancel():void//废止正在对该 FileReference 对象厉行的任何上载或下载垄断。
download(request:URLRequest, defaultFileName:String = null):void//敞开对话框,以批准用户从长途服务器下载文件.
upload(request:URLRequest, uploadDataFieldName:String = &Filedata&, testUpload:Boolean = false):void//开始将用户抉择的文件上载到长途服务器。
7、flash与flex是如何调停开发的?
答:这个问题能够这么来会意,万一是确乎必需用到FLEX SDK的利用,那我们就能够发生一个flex工程,翔实必需flash做UI的时候,输出成swc作为flex的skin,万一说并无须要flex sdk,只是为了编码得体而抉择flex的话,那我们凡是发生一个as工程,让flex作为flash的编码器。
8、请说下事件里的currentTarget 和 target的区别?
答:在事件流的过程中,目标阶段确定的目标对象由Event中的target属性来记录,
冒泡阶段移动的游标则由currentTarget来记录。事件对象冒泡过程中每往上移动一级,就会克隆出一个仅与前副本currentTarget不同的新副本。
9、warning: unable to bind to property ” on class ‘Object’ (class is not an IEventDispatcher) 在使用ItemRender时,经常会出现这种警告?
答:ArrayCollection的子元素是无法作为数据源绑定的。可以声明中间变量,在override set data时将ArrayCollection的子元素传入,
然后再将中间变量作为新的绑定源即可。
10、常用的几个切换数据的组件比如: TabNavigator等都有属性 creationPolicy 你知道这种策略的使用方式是什么嘛?以及优,缺点呢?
答:延迟实例化。优点是可以更快地加载组件,缺点是首次访问其他组件时,由于需要重新加载此组件,可能会有一定的延迟。
11、请试写一个自定义的验证组件
package myCompenent
import mx.validators.V//引用Validator类
import mx.validators.ValidationR//引用ValidationResult类
public class myValidators extends Validator
public function myValidators()//构造函数
private var results:A//定义一个数组,用以存储错误
//重写验证函数
override protected function doValidation(value:Object):Array
var s:String = value as S
results = [];//清空数组
results = super.doValidation(value);//先用继承类中的doValida tion方法验证
if (results.length & 0)//如果验证时有错,返回错误信息
if(s.length&6)//自定义验证,字符长度不超过6
//记录出错信息
results.push(new ValidationResult(true,”text”,”StringTooLong”, “字符长度超过6了”));
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致君,已阅读到文档的结尾了呢~~
【精品】flex3 in action 中文版第一部分
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
flex3 in action 中文版第一部分
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Adobe? Flex?是Adobe公司的多平台的RIA(Rich Internet Applications)开发产品RIA全称为&Rich Internet Application&,其意思为&富互联网应用程序&。它具有高度的用户互动性和丰富的用户体验Adobe公司的Flex是一个安装在客户端的表现层的服务器;Flex表现层服务器包含了Flex应用框架和Flex运行服务。Flex框架又包含了MXML描述语言,ActionScript程序语和Flex类库。Flex应用需要至少一个的MXML文件或ActionScript类文件来构成Flex应用的源程序。Flex Builder:Flex Builder是Adobe格式官方发布的IDE(集成开发系统),用来构建在开源的Eclipse IDE上,使用Flex的MXML和ActionScript技术,用来进行Flex书写和调试与Live Cycle Data Service(LCDS)集成:LCDS是Flex应用的重要组成部分,简单的说,其作用在于Flex应用与数据层之间的发送和获取数据多数传统技术包含了至少三层的结构:一个数据层(Data Tier),一个业务层(Business Tier),一个表现层(Presentation Tier)。数据层通常指数据库或数据源。业务层指应用核心的业务逻辑部分。Flex首先包含了一个数据层(Data Tier)和一个业务层(Business Tier),数据层和业务层中间的集成层(Integration Tier),表现层(Presentation Tier)。与传统技术不同的是,Flex还有一层客户层(Client Tier),这是与传统网页技术完全不同的一个层面。Flex的客户层允许用户可以脱离服务器的工作,不受网络的限制,并且与用户更好的互动。MXMLMXML是一种XML语言,最基本的作用是用来布局Flex应用程序的用户界面。MXML也可以用来定义不可视的Flex应用。例如,它可以定义数据源,并将数据源绑定到用户界面。MXML类似于HTML,它也提供各种标签来定义用户界面MXML标签不仅包括可视的标签,如数据表格(DataGrid)、树结构(Tree)、菜单(Menu)等;它还包括不可视的标签,如Web Service连接、数据绑定、动画效果等。用户还可以将用户自定义的组件,定义为一个MXML标签。MXML和HTML最大区别在于MXML定义的应用程序,需要被编译成SWF文件,并在Flash Player上运行。&?xml version="1.0" encoding="utf-8"?&定义XML编码格式&mx:Application&标签是所有Flex应用程序的根标签。在Flex编程中,编程者使用两种语言来进行Flex应用编程:MXML和ActionScript。一般来说,MXML实现了在MVC(Model、 View和Control)编程模式中的View(视图)部分,而ActionScript则完成Model(模式)的部分。MXML标签相当于ActionScript中的类的属性,大多数MXML标签对应于ActionScript类或类的属性。MXML文件名必须是合法的ActionScript标识符号。文件名必须以字母或者下划线(_)起始。文件名中只能包含字母、数字和下划线。文件名不能与ActionScript类的名字、组件名一样,也不能是&Appliction&。同时,不要使用文件名与MXML标签名一样。文件名必须有小写的.mxml后缀。&mx:TextArea id="myText" text="hello world" fontFamily="Tahoma"/&在ActionScript中,与上述MXML代码得到相同结果的代码如下所示:myText.text= "hello world"; myText.setStyle("fontFamily", "Tahoma");有些MXML标签的属性可以设定为URL的值。例如,在&mx:Script&中,可以使用source属性来定义外部的一个ActionScript文件。MXML支持下列类型的URL:绝对路径:就是文件或目录在硬盘上真正的路径。示例如下。&mx:Style source="/mystyles.css"&&&& 动态的路径:它与Flex运行根路径有关。示例如下。&mx:HTTPService url="@ContextRoot()/directory/myfile.xml"/& 编译时的路径:它与Flex运行根路径有关。示例如下。&mx:Script source="/myscript.as"/&相对路径:就是从当前目录下找到所需文件的路径。示例如下。&mx:Script source="../myscript.as"/&下面的这组标签不直接与ActionScript对象和属性有对应关系,通称为编译标签。这些标签在MXML中均用来进行与数据有关的,不可视的设计。&mx:Binding&:绑定标签,用来进行在MXML代码中的数据绑定工作。&mx:Component&:组件标签,定义一个文件内部可视组件的实体。&mx:Metadata&:元数据标签,提供给Flex编译器关于如何使用MXML组件信息。&mx:Model&:模式标签,在MXML代码中定义数据模式。 &mx:Script&:ActionScript标签,用来嵌入ActionScript代码。 &mx:Style&:样式标签,用来嵌入样式表单。&mx:XML&:XML标签,是编译时的标签,用来从文本模式产生XML对象,或XMLNode对象。&mx:XMLList&:XMLList标签,是编译时的标签,用来从包含有效的XML节点的文本模式来产生一个XMLList对象。&mx:operation&:WebService的操作标签,用来定义WebService的操作。&mx:request&:WebService的操作标签的需求项,用来定义WebService的操作所要的需求项。&mx:method&:RemoteObject的方法标签,用来定义RemoteObject所使用的方法。&mx:arguments&:RemoteObject的方法标签的参数,用来定义RemoteObject所使用的方法的参数。MXML标签规则不是所有的标签都要求有id属性。所有的根标签都不能有id属性。布尔属性只有true和false两个值。&mx:Binding&要求有source和destination属性。&mx:Binding&标签不能有id属性。&mx:WebService&标签要求wsdl和serviceName中的其中一项,但不允许两者一起出现。&mx:RemoteObject&标签要求source和name中的其中一项,但不允许两者一起出现。&mx:HTTPService&标签要求url和serviceName中的其中一项,但不允许两者一起出现。&mx:operation&标签要求name值,但不允许重复name的值。&mx:operation&标签不能有id属性。&mx:method&标签要求name值,但不允许重复name的值。&mx:method&标签不能有id属性。Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作ActionScript是对大小写敏感的语言。定义一个变量时必须使用var关键词,示例如下:&&&&&&&&&&&&&&&&&&&& //定义一个变量。 没有定义变量类型在ActionScript中是合法的,但会给出一个警告信息。定义一个整数类型的变量代码如下所示。var index:&&&&&&&&&&&&&&&& //定义一个整数类型变量。一个全局(global)变量是在任何函数之外声明的变量,它在整个代码中都可以引用和修改。与之相对的是局部(local)变量,它是在函数内部被定义,只在这一部分代码中可以被引用和修改的变量。在ActionScript中,变量的作用范围就是在其中定义此变量的函数或类。全局变量则是在函数和类之外定义的变量。ActionScrpt使用const声明,用来建立常量。常量只能被赋值一次。常量的必须在声明的范围内被赋值var numArray:Array = ["zero", "one", "two"];&&&&&&&& //定义一个数组。数据类型检查可以在编译时间或运行时间进行。静态语言,如C++或Java是在编译时间进行检查;动态语言,如Python是在运行时间进行检查。 ActionScript做为一种动态的语言,也是在运行时间进行检查,但它也支持在编译时间进行检查。当定义编译器的模式为严格模式(strict mode)时,支持在编译和运行时的类型检查。在普通模式下,支持运行时的类型检查。is操作符是ActionScript新的操作符,用来测试变量或表达式数据类型。下述的示例建立一个Sprite类的实例,命名为mySprite。代码首先使用is来检查mySprite是否为Sprite和DisplayObject类的一个实例,然后检查它是否为IEventDispatcher interface的一个成员。var mySprite:Sprite = new Sprite(); trace (mySprite is Sprite);&&&&&&&&&&&& //输出: truetrace (mySprite is DisplayObject);&&&&&&&& //输出: true trace (mySprite is IEventDispatcher);&&&& //输出: trueas操作符是ActionScript新的操作符,用来测试表达式是否是给定的数据类型的成员。与is操作符不同的是,as操作符不返回布尔值,而是返回表达式的值。下述的示例使用as操作符代替is操作符,以测试Sprite实例是否是一个DisplayObject和IEventDispather数据类型的成员。var mySprite:Sprite = new Sprite(); trace (mySprite as Sprite);&&&&&&&&&&&& //输出: 〔object Sprite〕trace (mySprite as DisplayObject);&&&&&&&& //输出: 〔object Sprite〕trace (mySprite as IEventDispatcher);&&&& //输出: 〔object Sprite〕类型转换是指将数据从一个数据类型转换为其他数据类型。类型转换可以是隐含的(implicit)和不隐含的(explicit)。隐含的转换也称为强制的(coercion),在运行时使用。例如,如果给一个布尔类型的变量赋值为&2&,编译器则转换布尔数值为true。不隐含的转换也称为转型(casting),在编译时改变变量类型所使用。语法如下代码所示。var myBoolean:Boolean =var myINT:int = int(myBoolean); trace(myINT);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //输出: 1如果一个函数是一个类的一部分,或者是依附于一个对象实例,被称为方法。其他的方式称为函数closure使用return声明在函数中返回数值,return后面可以跟随一个值或者一个表达式。下面的示例显示了函数返回一个表达式所产生的值,代码如下所示。function doubleNum(baseNum:int):int {return (baseNum * 2);}包和命名空间是相关的概念,包允许编程者将类打包到一起,帮助实现代码分享和减小命名的冲突,同时帮助管理类文件。命名空间允许编程者控制每个对象的可视性。在ActionScript中,包是由命名空间来实现的,但它们不是同义词。当定义一个包时,就要建立一个特定类型的命名空间,保证在编译时能被识别。当命名空间直接建立时,不需要在编译时被识别。ActionScript提供了非常灵活的方法来组织包,类和源文件。ActionScript允许建立多个类在一个源文件中,但每个文件中只有一个类可以在包中被声明。在包中的类的名称必须和文件名一致。在ActionScript中使用package语句来声明包。其语法示例如下所示:package 文件包名 { public class 类名 {}}如果需要使用包中的一个类,就必须要输入包或者特定的类。示例代码如下所示。import samples.*;& //输入samples类如果只需要使用包中的一个类,建议使用下面的用法。因为输入整个包可能会引起文件名冲突。import samples.SampleC命名空间用来控制编程者建立的属性和方法的可视性。使用ActionScript命名空间有以下三个基本的步骤。(1)使用namespace关键词来定义命名空间,代码如下所示。namespace vsersion1; (2)在定义属性和方法时使用命名空间,代码如下所示。version1 function myFunction () {};(3)当使用了命名空间,就可以使用use来引用命名空间,代码如下所示。use namespace version1; myFunction();使用MXML文件中,用户可以使用&mx:Script&标签直接把ActionScript代码放置在文件中,也可以包含(include)在里面。当使用&mx:Script&时,所有的内容都必须包含在CDATA结构中。这样保证编译将script块当作 XML来处理。因此Flex建议使用以下的结构来包含ActionScript代码。&mx:Script& &![CDATA[ ... ]]& &/mx:Script&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:663760次
积分:7174
积分:7174
排名:第2967名
原创:123篇
转载:125篇
评论:66条
(5)(1)(1)(9)(6)(3)(7)(4)(2)(4)(4)(10)(8)(8)(6)(28)(1)(2)(18)(11)(17)(3)(13)(13)(1)(10)(9)(12)(6)(9)(13)(4)
/article/454.htm

我要回帖

更多关于 战网应用程序错误代码 的文章

 

随机推荐