Flex与As3学习笔记之:Part 3 函数参数、字符串处理、日期与时间类型
一、函数
1.1在AS3中,也可以像JS中定义函数表达式,如:
var traceParameter:Function = function(aParam : String)
{ trace(aParam) ; }
调用:traceParameter(“Hello”);
1.2按值或按引用传递
在AS3中,基本数据类型是按值传递的,其它对象则按引用传递。以下为例,第一个按值传递,第二个按引用传递:
function passPrimitives(x:int,y:int):void
{ x++; y++; }
function passByRef(obj:Object):void
{ obj.x++; obj.y++;}
1.3默认参数
AS3中允许默认参数设置,比如说一个函数有三个参数,我可以指定后面两个参数有默认值,这样,使用时只给其一个参数也能正常调用。所有具有默认值的参数必须放在参数列表的末尾。
例:function dvFun(x:int , y:int=3,z:int=5):void{...}
可以如下调用:dvFun(1) //y与z则系统自动以3,5去调用。
1.4 arguments对象:可以用arguments.call实现递归
在AS3的函数调用中可以允许参数的数量大于函数定义的参数数量,可以为arguments对象的数组也访问传递给函数的任何参数。
arguments是一个数组,arguments.length可以计算传递过来的参数个数,arguments.callee提供对函数本身的引用,该引用可以用于实现递归调用。注:函数在定义时,若参数使用了arguments为变量名,则会覆盖arguments对象。
例:
function traceArgArr(x:int):void
{
for(var i:uint = 0 ; i < arguments.length; i ++ )
{
trace(arguments[i]);
}
}
traceArgArr(1,2,3); // 将输出1 2 3
例:AS3中的递归调用:
var factorial:Function = function ( x:uint)
{
if(x = = 0)
{
return 1;
}
else
{
return (x * arguments.callee (x -1 ) );
}
}
则:trace( factorial(5) ); // 120
1.5 ...参数
与arguments类似,一旦使用它将屏蔽arguments对象,它与arguments不同的是,没有callee功能,以下为例:
function traceArgArray ( ... args):void
{
for( var i:uint = 0 ; i < args.length; i + +)
{
trace ( args [i] );
}
}
traceArgArr(1,2,3); 将输出1 2 3
二、字符串处理
AS中的字节符串文本可以用双引号,也可以用引号去申明或定义,这点与JS非常相似,可以在单引号中用双引号字符,也可以在双引号中用单引号字符。
var str1:String = “Helllo”;
var str1:String = ‘Hello’;
var str1:String = new String(); //str1为””
2.1 length属性:与C#不同的是,null.length不会抛出异常,而是为0;
2.2 charAt()、charCodeAt()、String.fromCharCode()
用charAt()来返回指定位置(0 到 length-1)上的某个字符,用charCodeAt()来返回指定位置上字符的Unicode字符代码。
charAt返回的是String,若index 超标,则返回空字符串
charCodeAt返回的是Number,若index超标则返回NaN
例:trace(“h”.charAt(0), “-“ , “h”.charCodeAt(0) ); // h – 104
在定义字符串时,可用Unicode来生成,如
var myStr:String = String.fromCharCode(104,101,108,108,111); // myStr为”Hello”
2.3 toLowerCase()与toUpperCase():大小写之间转换字符串
2.4 子串查找
str.substr(2,4) 第一个参数为起始位置索引(从0开始),第二个参数为长度
str.substring(2,4) 第一个参数为起始位置索引,第二个参数为结束位置索引
str.slice(x,y) 若x,y都为正数时与substring()相同,若为负数时,则从倒数到x个到倒数第y个的子串。x为正时从第一个字符起往后找,为负时从最后一个字符往前找,y为负时表现位置,x为负y为正时y表示长度
2.5 子串位置搜索
str.indexOf(“子串”) // 返回子串的位置
str.indexOf(“子串”,5) // 从第5个字符开始搜索子串的位置
str.lastIndexOf(“子串”) // 返回子串最后一次出现的位置
str.lastIndexOf(“子串”, 3) // 返回子串最后一次出现的倒数位置,最右为0开始
2.6 由分隔符创建字符串数组split()方法
var queryStr:String =”asdf&fak&12”;
var params:Array = queryStr.split(“&”,2) ; 返回为[“asdf”,”fak”]前两个元素
还可以使用正则表达式: var a:Array = str.split(/\s+/);
2.7子字符串匹配:search()
匹配的位置获取search():仅返回第一个匹配的位置
var str:String = “The more the better.”;
trace(str.search(“the”)); // 输出9
还可以用正则:
var patten:RegExp=/the/i; // i表示不区分大小写
则:str.search(patten); 返回的是0(The的位置)
返回匹配的第一个子串(若指定g标志,则可以返回所有匹配串的数组)
var str :String = “www.itzcn.com, www.webzcn.org”;
var pattern:RegExp = /\w*.\w*\.[org|com]+/g;
var results:Array = str.match(pattern);
2.8子串替换replace(“旧串”,”新串”)或replace(正则,”新串”)
在正则串定义时,可在其后指定g标志表示替换所有符合的,可以指定i标志忽略大小写。
三、日期与时间类型
var now:Date = new Date() ; //返回当前时间
var d:Date = new Date(1323231); //返回从1970.01.01加1323231毫秒
var d1:Date = new Date(2000,12,1,0,0,0,0);
Date有以下属性:
fullYear(2011)、month(1-12)、date(1-31)、day(0-6)、hours(0-23)、minutes(0-59)、seconds(0-59)、milliseconds(0-999)
另外的方法:getMonth()、getMonthUTC()等
getTime()可以获取从1970.01.01以来的毫秒数,用setTime(milliseconds)可以用毫秒数来设置时间
四、计时器Timer类及其事件处理
4.1命名空间:import flash.utils.Timer;
4.2 TimerEvent.TIMER与TimerEvent.TIMER_COMPLETE事件
var oneMinuteTimer:Timer = new Timer(1000,60); //每一秒触发,持续60秒
例:
package
{
import flash.display.Sprite;
import flash.events.TimerEvent;
import flast.utils.Timer;
public class ShortTimer extends Sprite
{
public function ShortTimer()
{
var minuteTimer:Timer = new Timer(1000,5);
minuteTimer.addEventListener(TimerEvent.TIMER,onTick);
minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE,
onTimerComplete);
ninuteTimer.start();
}
public function onTick(event:TimerEvent):void{
trace(event.target.currentCount);//当前执行到了第几次
}
public function onTimerComplete(event:TimerEvent):void{//时间到};
}
}
4.3其它计时函数及说明(AS2中的,在AS3中不推荐使用)
setInterval(closure:Function,delay:Number,...args):uint |
每隔毫秒后运行 |
clearInterval(id:uint):void |
删除setInterval |
setTimeout(closure:Function,delay:Number,..args):uint |
指定毫秒后运行 |
clearTimeout(id:uint):void |
|
getTimer():int |
返回flash player被初始化以来经过的毫秒数 |