zoukankan      html  css  js  c++  java
  • 第1章 ActionScript教程 核心AS类

    使用日期和时间
    使用字符串
    使用数组
    处理错误
    使用正则表达式
    使用 XML
    使用本机 JSON 功能
    处理事件
    使用应用程序域

    1.1 日期和时间

    日历日期时间及时间间隔,计时分别由Date类,flash.utile.Timer类来提供。

    * 日期时间

    //定义日期时间
    var now:Date = new Date(); //无参数定义日期时间,为当前时间
    var startTime:Date = new Date(1000*60*60*24); //1个参数毫秒数,自1970-1-1以来经过的毫秒数
    var endTime:Date = new Date(2013,5,19,16,20,59,234); //参数为年、月、日、小时、分钟、秒和毫秒
    
    
    //获取日期时间相应属性
    /*
    • fullYear 属性
    • month 属性,以数字格式表示,分别以 0  到 11  表示一月到十二月
    • date  属性,表示月中某一天的日历数字,范围为 1  到 31
    • day 属性,以数字格式表示一周中的某一天,其中 0  表示星期日
    • hours 属性,范围为 0  到 23
    • minutes 属性
    • seconds 属性
    • milliseconds 属性
    */

    日期值在内部以毫秒形式保存,日期时间的加减运算可以换算成毫秒再加减。

    * 时间间隔

    package  
     { 
     import flash.display.Sprite; 
     import flash.events.TimerEvent; 
     import flash.utils.Timer; 
     
      public class ShortTimer extends Sprite 
      { 
          public function ShortTimer()  
          { 
              // creates a new five-second Timer 
              var minuteTimer:Timer = new Timer(1000, 5); 
            
              // designates listeners for the interval and completion events 
              minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
              minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
            
              // starts the timer ticking 
              minuteTimer.start();
           } 
     
      public function onTick(event:TimerEvent):void  
        { 
          // displays the tick count so far 
          // The target of this event is the Timer instance itself. 
          trace("tick " + event.target.currentCount); 
        } 
     
      public function onTimerComplete(event:TimerEvent):void 
      { 
             trace("Time's Up!"); 
      } 
     }
    }

    1.2 字符串

    * 字符串

    //定义字符串
    var str1:String = "hello";
    var str2:String = 'hello';
    
    var str3:String = new String("hello");
    var str4:String = new String("hello is \"HELLO\" !"); //引号转义
    var str5:String = null;
    var str6:String = "";

    * 转义字符

    转义序列 字符
    \b Backspace
    \f 换页符
    \n 换行符
    \r 回车符
    \t Tab
    \unnnn Unicode 字符,字符代码由十六进制数字 nnnn  指定;例如,\u263a  为笑脸字符。
    \\xnn ASCII  字符,字符代码由十六进制数字 nn  指定。
    \' 单引号
    \" 双引号
    \\ 单个反斜杠字符

    * 字符串属性

    长度:var len:Int = str1.length;

    * 字符串方法

    //返回字符
    str1.charAt(1): //返回hello中e
    str1.charCodeAt(1): //返回hello中e的ASCII码101
    
    //比较字符串
    //比较运算符  <、<=、!= 、==、=> 和 >
    
    //字符串转换
    var n:Number = 3.1425926;
    var str2:String = n.toString();
    
    //字符串连接
    var str3:String = "PI is ";
    var str4:String = str3 + str2; //
    var str5:String = str2.concat(" ",str3,"  ",n);
    str5 += " !!!";
    
    
    //字符串截取
    var str6:String = "Hello from Paris, Texas!!!";
    var str7:String = str6.substr(11,15);  // 15为截取的长度
    var str8:String = str6.substring(11,15); // 15为str6结束处字符位置
    var str9:String = str6.slice(11,15); //15为截取的长度
    var str10:String= str6.slice(-3,-1); //从末尾开始向开头位置截取1个字符
    
    //查找匹配字符串
    str6.indexOf("h");
    str6.lastIndexOf("p",11);
    
    //分隔字符串成数组
    var query:String = "a=23&b=200&c=user"
    var paras:Array = query.split("&",2); //第2个参数表示返回数组的最大大小  
    
    //正则表达式分隔数组
     var str11:String = "Give me\t5." 
     var a:Array = str11.split(/\s+/); // a == ["Give","me","5."]
    
    str11.toLowerCase();
    str11.toUpperCase();

    1.3 数组

    * Array,Vector,关联数组,Dictionary,多维数组

    //Array为任意类型的数组
    var names:Array = new Array(3);
    var oddNumbers:Array = [1, 3, 5, 7, 9, 11]; 
    var names:Array = new Array("John","Jane","David");
    
    
    //Vector为指定类型的数组,性能比Array快,类型检查
    var v:Vector.<String> = new Vector.<String>();
    var v:Vector.<int> = new <int>[0,1,2,]; //尾部逗号为可选,数组中不支持空项
    var friends:Vector.<String> = Vector.<String>(["Bob", "Larry", "Sarah"]);  //Vector.<T>()  全局函数
    
    //数组插入元素
     var planets:Array = new Array(); 
     planets.push("Mars"); //在末尾添加 
     planets.unshift("Mercury"); // 在开头添加
     planets.splice(1, 0, "Venus", "Earth");  //在指定索引位添加
    
    //检索和删除数组元素
     var oceans:Array = ["Victoria", "Pacific", "Aral", "Superior", "Indian", "Huron"]; 
     var first:String = oceans[0]; //检索元素
    
     oceans.pop(); //删除末尾一个元素
     oceans.shift(); //删除开头一个元素
     oceans.splice(startIndex, deleteCnt, "Arctic", "Atlantic"); //从指定索引位开始,删除指定长度的元素,并添加后两项字符串
    
    //排序
    oceans.reverse(); //反转
    oceans.sort(); //按预定义方式排序
    oceans.sort(Array.CASEINSENSITIVE); // Array.DESCENDING | Array.CASEINSENSITIVE
    oceans.sortOn(); //按某属性排序
    
    //查询数组
    //方法concat()、join() 、slice()  和 toString()  
    
    //关联数组
     var monitorInfo:Object = {type:"Flat Panel", resolution:"1600 x 1200"}; 
     var tp:String =monitorInfo["type"];
    
     var monitorInfo:Array = new Array(); 
     monitorInfo["type"] = "Flat Panel"; 
     monitorInfo["resolution"] = "1600 x 1200";
    
    //字典
     import flash.display.Sprite; 
     import flash.utils.Dictionary; 
     
     var groupMap:Dictionary = new Dictionary(); 
     
     // objects to use as keys 
     var spr1:Sprite = new Sprite(); 
     var spr2:Sprite = new Sprite(); 
     var spr3:Sprite = new Sprite(); 
     
     // objects to use as values 
     var groupA:Object = new Object(); 
     var groupB:Object = new Object(); 
     
     // Create new key-value pairs in dictionary. 
     groupMap[spr1] = groupA; 
     groupMap[spr2] = groupB; 
     groupMap[spr3] = groupB; 
     
     if (groupMap[spr1] == groupA) 
     { 
      trace("spr1 is in groupA");  
     } 
     if (groupMap[spr2] == groupB) 
     { 
      trace("spr2 is in groupB");  
     } 
     if (groupMap[spr3] == groupB) 
     { 
      trace("spr3 is in groupB");  
     }
    
    //循环访问
     for (var key:Object in groupMap) 
     { 
     trace(key, groupMap[key]); 
     }
    //多维数组 
    var masterTaskList:Array = new Array(); 
     masterTaskList[0] = ["wash dishes", "take out trash"]; 
     masterTaskList[1] = ["wash dishes", "pay bills"]; 
     masterTaskList[2] = ["wash dishes", "dentist", "wash dog"]; 
     masterTaskList[3] = ["wash dishes"]; 
     masterTaskList[4] = ["wash dishes", "clean house"]; 
     masterTaskList[5] = ["wash dishes", "wash car", "pay rent"]; 
     masterTaskList[6] = ["mow lawn", "fix chair"];
    
    
    //克隆数组
    //通过调用不带参数的 concat() 或 slice()  方法,实现浅拷贝,仅复制指向对象的引用而非对象本身
    //将数组序列化为 ByteArray  类的实例,然后将此数组读回到新数组中实现深拷贝
     import flash.utils.ByteArray; 
     
     function clone(source:Object):* 
     { 
       var myBA:ByteArray = new ByteArray(); 
       myBA.writeObject(source); 
       myBA.position = 0; 
       return(myBA.readObject()); 
     }
    
    //数组扩展
    //page 37

    * 内存管理及垃圾回收

    FlashPlayer 和AIR使用垃圾回收系统来恢复不再使用的内存。当对象不具有指向它的引用时,即可对其进行垃圾回收,并会在下次执行垃圾回收系统时恢复内存。

    //对象删除引用
     import flash.utils.Dictionary; 
     
     var myObject:Object = new Object(); 
     var myMap:Dictionary = new Dictionary(); 
     myMap[myObject] = "foo";
     myObject = null; 
     delete myMap[myObject];

    垃圾回收方法

    1)删除对象的引用

    2)删除对象子对象的引用 及 删除对象对子对象的引用

    3)对象引用外部对象,删除时要将对象的引用设置为null

    4)系统组件,全局工具,管理类有提供卸载方法或者资源回收方法,需先调用,否则会造成内存泄露和性能损失

    5)父对象被删除,子对象可能立即删除,也可能延迟到后期被系统自动删除,或者第二次移除操作时被删除

    6)注册的事件监听器在用完时移除

    1.4 处理错误

    //try..catch..finally语句结构 
    var fileRef:FileReference = new FileReference(); 
     try 
     { 
     fileRef.upload(new URLRequest("http://www.yourdomain.com/fileupload.cfm")); 
     } 
     catch (error:IllegalOperationError) 
     { 
     trace(error); 
      // Error #2037: Functions called in incorrect sequence, or earlier 
      // call was unsuccessful. 
     }

    1.throw语句抛出异常

    2.自定义错误类

    3.未捕获的错误,运行时UncaughtErrorEvents 对象调度此事件uncaughtError事件

    4.核心错误类见page55

    1.5 正则表达式

    //创建正则表达式
     var pattern1:RegExp = /bob/i;  //正斜杠字符 ( / )  来界定正则表达式
     var pattern2:RegExp = new RegExp("bob", "i");

    元字符: ^ $ \ . * + ? ( ) [ ] { } | 见page66

    元序列:{n} {n,} {n,n} …  见page67

    字符类:

    数组表示符:

    逻辑或:

    组:

    标志和属性:

    1.6 使用XML

    page80

    //读取外部xml文档
    import flash.events.Event; 
    import flash.net.URLLoader; 
     
     var myXML:XML = new XML(); 
     var XML_URL:String = "http://www.example.com/Sample3.xml"; 
     var myXMLURL:URLRequest = new URLRequest(XML_URL); 
     var myLoader:URLLoader = new URLLoader(myXMLURL); 
     myLoader.addEventListener(Event.COMPLETE, xmlLoaded); 
     
     function xmlLoaded(event:Event):void 
     { 
      myXML = XML(myLoader.data); 
     trace("Data loaded.");
    }

    1.7 使用Json功能

    * 顶级类JSON提供两个方法来进行字符串到AS对象的相互转换。

    JSON.parse(text:String, reviver:Function = null):Object
    接受 JSON 格式的字符串并返回表示该值的 ActionScript 对象,reviver函数用来自定义解码实现。

    (Page103)


    JSON.stringify(value:Object, replacer:* = null, space:* = null):String
    返回 JSON 格式的字符串,用于表示 ActionScript 值,replacer函数用来自定义编码实现。

    JSON.stringify(d, function (k,v):* { 
    return "any date format you like via replacer: "+ 
    "holder[k].time:"+this[k].time + " holder[k].hours:"+this[k].hours; 
    });

    * JSON API包括toJSON()成员函数,但是类内部不提供任何成员的ActionScript 类的导入和导出。JSON 将遍历所遇到的每一个对象的公共属性。如果一个对象包含其他对象,JSON 将以递归形式访问嵌套对象,并执行相同的遍历。如果任何对象提供toJSON() 方法,JSON 将使用该自定义方法,而不是其内部算法。

    AS允许任何类在原型上定义或重新定义toJSON()方法来重现实现JSON编码。如对系统内置类MovieClip的原型类定义toJSON().

    MovieClip.prototype.toJSON = function(k):* { 
    trace("prototype.toJSON() called."); 
    return "MovieClip toJSON"; 
    } 

    1.8 处理事件

    Page106

    1.9 应用程序域

    ApplicationDomain 类的用途是存储AS3定义表。SWF 文件中的所有代码被定义为存在于应用程序域中。可以使用应用程序域划分位于同一个安全域中的类。这允许同一个类存在多个定义,并且还允许子级重用父级定义。使用 Loader  类 API 加载用AS3编写的外部 SWF  文件时,可以使用应用程序域。(请注意,在加载图像或用AS1或AS2编写的 SWF  文件时不能使用应用程序域。)包含在已加载类中的所有AS3定义都存储在应用程序域中。加载SWF文件时,通过将 LoaderContext  对象的 applicationDomain  参数设置为ApplicationDomain.currentDomain,可以指定文件包含在 Loader  对象所在的相同应用程序域中。通过将加载的 SWF  文件放在同一个应用程序域中,可以直接访问它的类。如果加载的 SWF  文件包含嵌入的媒体(可通过其关联的类名称访问),或者您要访问加载的 SWF  文件的方法.

    package 
     { 
     import flash.display.Loader; 
     import flash.display.Sprite; 
     import flash.events.*; 
     import flash.net.URLRequest; 
     import flash.system.ApplicationDomain; 
     import flash.system.LoaderContext; 
     
      public class ApplicationDomainExample extends Sprite 
     { 
      private var ldr:Loader; 
      public function ApplicationDomainExample() 
     { 
       ldr = new Loader(); 
      var req:URLRequest = new URLRequest("Greeter.swf"); 
      var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); 
      ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);   ldr.load(req, ldrContext);   
    } 
    
    private function completeHandler(event:Event):void 
     { 
      var myGreeter:Class = ApplicationDomain.currentDomain.getDefinition("Greeter") as Class; 
      var myGreeter:Greeter = Greeter(event.target.content); 
      var message:String = myGreeter.welcome("Tommy"); 
      trace(message); // Hello, Tommy 
     } 
    
     } 
     }

    • SWF 文件中的所有代码被定义为存在于应用程序域中。主应用程序在 “ 当前域” 中运行。“ 系统域” 中包含所有应用程序域(包括当前域),也就是包含所有 Flash Player  类。
    • 所有应用程序域(除系统域外)都有关联的父域。主应用程序的应用程序域的父域是系统域。已加载的类仅在其父级中没有相关定义时才进行定义。不能用较新的定义覆盖已加载类的定义。

    appdomain

    声明:本站未注明转载的文章均属本人原创文章,文中所涉及文字、图片、图表、Logo、页面版式以及其他信息等内容均受版权、标签和其它财产所有权法律的保护,请勿用于任何形式的商业用途,转载请保留该声明,并注明出处。茶沫:http://www.cnblogs.com/janas/ 欢迎沟通交流:nofulls@gmail.com

    专注于机器学习、前端相关邻域。关注 全栈深入 公众号查看更多硬核文章。
  • 相关阅读:
    Eclipse设置、调优、使用
    eclipse安装插件的方式 三种:links、eclipse中使用插件安装向导安装、直接copy插件到对应的eclipse目录 MyEclipse10安装SVN插件
    eclipse 在Servers窗口创建一个Tomcat 6.0 Server失败
    小技巧:帮你批量删除代码前的行号
    editplus发布3.01 Build 446 Final版(附下载及中文版)
    eclipse 垃圾回收器,内存释放
    eclipse.ini的相关说明
    Eclipse 去掉JavaScript Validator
    DropBox 超实用的免费文件网络同步、备份、分享工具
    使用EditPlus技巧,提高工作效率(附英文版、自动完成文件、语法文件下载)
  • 原文地址:https://www.cnblogs.com/janas/p/3087271.html
Copyright © 2011-2022 走看看