AS3学习笔记(一)基础知识

ActionScript被ActionScript虚拟机执行,而ActionScript虚拟机是FlashPlayer的一部分。

常用图形处理软件

矢量图形软件IIIustrator;位图图像处理软件Photoshop。

一切面向对象

在Java 中,值类型并不是以对象形式存在的。值类型的变量,存储的不是引用,而是直接容纳了具体的值(Value)。在ActionScript3中则不一样,因为本质上,值类型仍然是对象。值类型是一种特殊的对象,叫做不变对象(immutable object)。一旦虚拟机发现指向一个对象的引用要改变该不变对象的值,就会另行创建一个新的不变对象来接受新的值。

关键字

AS3中定义常量用const,定义变量用var。

Number类型bug:

1.小数相加不一定能得到整数。

比如,我们声明一个变量floatB,初始值为零,让它连加10 次0.1。我们期望得到数值1,但实际上我们得不到,只能得到一个莫名其妙的0.9999999999999999

在编程时避免用这样的算法。如果实在需要浮点数相加得到整数,那么要记得使用Math.round()来修正。

2.不要让数值差距过大的浮点数相加减,结果可能有偏差。

比如,让100 000 000 和0.000 000 001相加。我们期望结果是100 000 000.000 000 001,但实际上结果是100 000 000。无论我们让它们相加多少遍,

结果都是100 000 000。一般来说,只要数值差距不超过十几位,不会有问题。

AS3中的数组:

在ActionScript3中,数组是以非负整数为索引的稀疏数组(sparse array),不支持类型化数组(typed array)。

所谓非类型化数组,意思就是我们并不限制所有盒子都要放同一种类型的数据。所谓稀疏数组,意思就是不要求每个盒子都要装东西,比如我们可以让第1个和第9个装东西,其他留空。

ActionScript3 支持不规则的多维数组。所谓不规则,是指每个维度的子元素数目没必要一致。

强大的Object类:

//写入多个属性,属性名和属性值以“:”号隔开,属性之间以“,”号隔开

var foo:Object = {name:"kingda",web:"www.kingda.org"};

trace (foo.name);
//直接写入多个方法。这种形式很少用到,在这里只是告诉大家,可以这样运用。格式同上。

var bar:Object = {hello:function(){trace ("Hello,guys!");},

ok:function():String{return"that’s ok";}};

bar.hello();

//输出:Hello,guys!
Object 可以动态添加属性。看下例:

//先初始化,即新建一个空对象,将其引用赋值给变量kingda

Var kingda:Object = {};

//新增一个属性name,将字符串“黑羽”赋值给它

kingda.name = "黑羽";

//新增一个属性gender,将数字1 赋值给它

kingda.gender = 1;

trace (kingda.name);

//输出:黑羽

也可以动态添加方法,接上例:

kingda.hello = function(){

trace("Hi,ActionScript 3")

}

kingda.hello();

//输出:Hi,ActionScript 3

函数

在  ActionScript  3  中可以设置函数的默认参数。如果调用函数时,没有写明参数,那么会调用该参数默认值代替。(scala里有同样的功能,java里无)

function (参数1:类型=默认值,参数2:类型=默认值):返回类型{...}

在函数中传入的参数都被保留在了函数自动生成的一个  arguments 对象中。arguments如同一个数组,按参数定义的顺序保存着传入的参数。可以使

用  arguments[0]、arguments[1]访问传入的第一个参数、第二个参数,依次类推。 它有一个属性  length  表示当前传入参数的数目;还有一个属性  callee 持有指向当前函数的引用,常常用来创建递归。

在  ActionScript  2  中可以无视一个函数的定义,传入任意多的参数。但在 ActionScript 3 中,要严格遵守函数定义,否则就是非法的。为了提供这种传入任意参数的灵活性,ActionScript 3 提供了一个新的关键字...(rest)。只要在参数中定了...(rest),那么就可以接受任意多的参数。这些参数,以数组形式保留在 rest 中。rest 只是推荐的命名,我们可以改成其他的名字,比如  paras。另外要注意,一旦使用了...(rest)关键字, 那么  arguments 就不能再使用了。

函数可以层层嵌套。(scala里函数也可嵌套,java不行)

函数表达式定义法定义函数(scala可以,java不可以)

var aFunc:Function = function() { 

        trace ("This is bFunc!Excuted!"); 

}

Java 读者注意:

从语法上区分的话,如果类名前有dynamic 关键字,那么这个类就是动态类;如果没有,那么就是密封类。

强调一点,this 关键字只限于实例属性和实例方法。因为this 关键字必须要指代一个具体的实例,而静态方法和静态属性是不和任何实例相关联的。因此 this 关键字不能用在静态方法中,也不能用来访问静态属性。

internal:包内访问,如果一个类成员前面没有加任何访问控制符,那么将被默认为internal。

protected:不提供包内成员访问,只有子类才能访问。

在ActionScript3 中,只提供了对接口的支持,并没有提供对抽象类的支持。

ActionScript3中接口不可以定义常量。因此,Java 中的常量接口不能实现。

运算符:

1.如果等于运算符(或不等于运算符)两边的基元数据类型不相同,那么会执行类型转换后,再做比较。而全等运算符(===)和等于运算符(==)的不同在于,

全等运算符不执行类型转换。这就意味着,不同类型变量之间的比较用全等运算符一定会返回false。唯一的例外,就是全等运算符对于数值类型一视同仁,所以,

如果int、uint、Number类型数值相同,那么全等运算符也会认为相同。

2.要指出的是,等于运算符和全等运算符对于变量默认值的比较是不同的。当两边运算对象的值都是Number 类型,且值为NaN 时,全等和等于运算符都判断为false。

3.但如果两边运算对象的值是undefined和null时,等于运算符判断为相等,返回true,而全等运算符判断不等,返回false。当运算符一边的运算对象是数值,

另一边运算对象是非数值时:非数值的运算对象会尽量转换成数值,然后再进行数值比较。

4.如果运算符两边的运算对象都是字符串的话,那么将按照从左到右按字母顺序来挨个进行比较。

typeof、is、as

typeof是用字符串形式返回对象的类型。使用方法如下:

trace (typeof 10); //输出:number

is 用来判断一个对象是否属于一种类型。使用格式如下:

trace (9 is Number); //输出:true

as 与is格式一致,内容不同:如果一个对象属于一种类型,那么as返回这个对象;否则返回null。例子:

trace (9 as Number); //输出:9

trace (9 as Array); //输出:null

in 关键字用来判断一个对象是否作为另一个对象的键(Key)或索引,存在返回true,不存在返回false。

var a:Array = ["q","w","e"];

trace(2 in a); //数组a 含有索引2,所以为true

var b:Object = {ary:a, name:"ok"};

trace ("ary" in b); //true,确实有ary为键的属性

在ActionScript3 中,delete 关键字的作用已经大大减少,它只可以来用删除对象的动态实例属性,非动态属性不能删除。

如果要将一个属性所持有的引用删除,将null 赋值给该属性即可。

var b:Object = {ary:"one",name:"ok"};

deleted b; //会报错,不能这样删除了,正确用法 b = null; 

deleted b.ary; //成功,因为ary是b对象的动态属性

标签用法

所谓标签用法,其实设计意图简单。就是命名一下各层循环,这个名字就是标签(Label)然后break(或continue)语句后面带上这个标签,不就可以指定break(或continue)那一层循环了吗?就这么简单。

break 标签;

continue 标签;

转载于:https://my.oschina.net/shajin/blog/817313

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值