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

    专注于机器学习、前端相关邻域。关注 全栈深入 公众号查看更多硬核文章。
  • 相关阅读:
    nullnullConnecting with WiFi Direct 与WiFi直接连接
    nullnullUsing WiFi Direct for Service Discovery 直接使用WiFi服务发现
    nullnullSetting Up the Loader 设置装载机
    nullnullDefining and Launching the Query 定义和启动查询
    nullnullHandling the Results 处理结果
    装置输出喷泉装置(贪心问题)
    数据状态什么是事务?
    停止方法iOS CGD 任务开始与结束
    盘文件云存储——金山快盘
    函数标识符解决jQuery与其他库冲突的方法
  • 原文地址:https://www.cnblogs.com/janas/p/3087271.html
Copyright © 2011-2022 走看看