ActionScript3.0与Java6.0的不同点

本文详细介绍了AS3和Java中的数据类型,包括基本数据类型、值类型与引用类型的对比,以及AS3特有的三元运算符、类型检查、数组操作等特性。此外,还深入探讨了函数闭包和绑定方法的概念。

1基本数据类型

AS3中的基本数据类型是Boolean,int ,Number,String,uint

Java基本数据类型有8大:byte,char ,short ,long, int, float ,double, boolean

AS3Numeric:对于 numeric型数据, ActionScript 3.0 包含三种特定的数据类型:

Number:任何数值,包括有小数部分或没有小数部分的值,默认为NaN

Int:一个整数(不带小数部分的整数)

Uint:一个“无符号”整数,即不能为负数的整数

2.值类型与引用类型

值类型:直接存储值。每个变量的值不因其他变量的值的改变而改变。

Exp1.

var a :int = 3;

var b: int = a;

b = 9; //该变b的值为9

trace(a); //输出a3a没有因为b的值的改变而变

trace(b); //输出 b 9

引用类型:存储引用,指向要操作的对象

Exp2.a1,b1同时指向了数组[1,2,3]

var a1:Array= new Array(1,2,3);

trace(a1); //输出a11, 23

var b1:Array = a1 ;

b1[0] = 5;

trace(a1); //输出a1523,值已经被b1修改了

trace(b1); //输出b1523

AS3中的基本数据类型是Boolean,int ,Number,String,uint,值类型也是这么几种,除此都是引用类型。

java的的数据类型分有基本类型 和引用类型
基本数据类型有8大:byte,char ,short ,long, int, float ,double, boolean
引用类型有3大:类.接口.数组

AS值类型也是引用存值。

Java基本类型是直接持有值。

3. 三元运算符

test ? expression1 : expression2

test

任何 Boolean 表达式。

test true时返回的表达式expression1 。可能是逗点表达式。

test false时返回的表达式expression2 。可能是逗点表达式。

Exp1

var a :int = 3;

var b: int = a;

b = 9; //改变b的值为9

trace(a); //3

trace(b); //9

(a==5)?trace(a):trace(b) //9

4.typeof , is ,as

var my :String ="I LOVE YOU";

trace (typeof my); // stringtypeof:返回数据类型

trace (my is String); // trueis:判断数据类型

trace (my is Number); // false。不是Number数据类型

trace (my as String); //I LOVE YOUas:判断数据类型,并返回my

trace (my as Number); //null。不是Number数据类型,并返回null

5.in

判断一个对象是否作为另外一个对象的键(Key)或索引

var a:Array=[1,2,3,4,5];

trace(2 in a); // true

6.delete

删除对象任意一个实例的属性

Exp

var a:Array=[1,2,3,4,5];

trace(a); //1,2,3,4,5

delete a[2];

trace(a); //1,2,,4,5

7. AS3允许表达式的值不是Boolean值,会自动转换成相应的Boolean

8.for …in & for each …in枚举集合的元素

var books:Object = {

a:"LOVE IS EVERYTHING",

b:"FUCK YOUR BABY",

c:"I HIT YOU"

}

for (var k in books){

trace("key name: "+k+"\t value:"+books[k]);

}

/* \t在正则表达式中是匹配一个制表符,通过键值访问

输出:

key name: a value:LOVE IS EVERYTHING

key name: b value:FUCK YOUR BABY

key name: c value:I HIT YOU

*/

for each (var k in books){

race(k);

}

/* 直接访问成员

LOVE IS EVERYTHING

FUCK YOUR BABY

I HIT YOU

*/

8.arguments.callee

9. == ===的区别

10.AS3不支持抽象类(可用某些技巧实现抽象类),也不能直接实现单例模式(可以用包外类)

11.AS3不支持方法的重载,可以用…rest实现

12. ...(rest) 参数

ActionScript 3.0 中引入了一个称为 ...(rest)参数的新参数声明。此参数可用来指定一个数

组参数以接受任意多个以逗号分隔的参数。此参数可以拥有保留字以外的任意名称。此参数

声明必须是最后一个指定的参数。使用此参数会使 arguments 对象变得不可用。尽管 ...(rest)

参数提供了与 arguments 数组和 arguments.length属性相同的功能,但是它不提供与

arguments.callee 类似的功能。使用 ...(rest)参数之前,应确保不需要使用arguments.callee

下面的示例使用 ...(rest) 参数(而非 arguments对象)来重写 traceArgArray() 函数:

function traceArgArray(... args):void

{

for (var i:uint = 0; i < args.length; i++)

{

trace(args[i]);

}

}

traceArgArray(1, 2, 3);

// 输出:

// 1

// 2

// 3

13. 函数闭包

“函数闭包”是一个对象,其中包含函数的快照及其“词汇环境”。函数的词汇环境包括函数作用域链中的所有变量、属性、方法和对象以及它们的值。无论何时在对象或类之外的位置执行函数,都会创建函数闭包。函数闭包保留定义它们的作用域,这样,在将函数作为参数或返回值传递给另一个作用域时,会产生有趣的结果。

例如,下面的代码创建两个函数:foo() (返回一个用来计算矩形面积的嵌套函数

rectArea())和 bar()(调用 foo() 并将返回的函数闭包存储在名为 myProduct的变量中)。即使 bar() 函数定义了自己的局部变量 x(值为 2),当调用函数闭包 myProduct()时,该函数闭包仍保留在函数 foo()中定义的变量 x (值为 40)。因此, bar()函数将返回值 160,而不是 8

function foo():Function

{

var x:int = 40;

function rectArea(y:int):int // 定义函数闭包

{

return x * y

}

return rectArea;

}

function bar():void

{

var x:int = 2;

var y:int = 4;

var myProduct:Function = foo();

trace(myProduct(4)); // 调用函数闭包

}

bar(); // 160

方法的行为与函数闭包类似,因为方法也保留有关创建它们的词汇环境的信息。当方法提取自它的实例(这会创建绑定方法)时,此特征尤为突出。函数闭包与绑定方法之间的主要区别在于,绑定方法中 this关键字的值始终引用它最初附加到的实例,而函数闭包中 this 关键字的值可以改变。

14.绑定方法

绑定方法有时也叫做“闭包方法”,就是从它的实例提取的方法。作为参数传递给函数的方法或作为值从函数返回的方法都是绑定方法。在 ActionScript 3.0中,新增的绑定方法类似于闭包函数,其中保留了词汇环境,即使从其实例中提取出来也是如此。绑定方法与闭包函数之间的主要不同差别是,绑定函数的 this引用保留到实现方法的实例的链接或绑定。换句话说,绑定方法中的 this 引用总是指向实现方法的原始对象。对于闭包函数,this 引用是通用的,这意味着调用函数时,该引用指向与函数关联的任何对象。

如果使用 this 关键字,了解绑定方法就很重要。重新调用 this关键字可提供对方法父对象的引用。大多数 ActionScript 程序员都希望 this 关键字总是引用包含方法定义的对象或类。但是,如果不使用方法绑定,并不是总是做到这样。例如,在以前版本的 ActionScript中,this引用并不总是引用实现方法的实例。从 ActionScript 2.0的实例中提取方法后,不但 this 引用不绑定到原始实例,而且实例类的成员变量和方法也不可用。在 ActionScript 3.0中不存在这样的问题,这是因为将方法当作参数传递时会自动创建绑定方法。绑定方法用于确保 this关键字总是引用在其中定义了方法的对象或类。下面的代码定义了名为 ThisTest的类,该类包含一个名为 foo() 的方法(该方法定义绑定方法)和一个名为 bar()的方法(该方法返回绑定方法)。类外部的代码创建 ThisTest 类的实例,然后调用 bar() 方法,最后将返回值存储在名为 myFunc的变量中。

class ThisTest

{

private var num:Number = 3;

function foo():void // 定义的绑定方法

{

trace("foo's this: " + this);

trace("num: " + num);

}

function bar():Function

{

return foo; // 返回的绑定方法

}

}

var myTest:ThisTest = new ThisTest();

var myFunc:Function = myTest.bar();

trace(this); // 输出:[全局对象]

myFunc();

/* 输出:

foo's this: [object ThisTest]

output: num: 3 */

代码的最后两行表明:虽然前一行中的 this 引用指向全局对象,但绑定方法 foo()this 引用仍然指向 ThisTest类的实例。另外,存储在 myFunc 变量中的绑定方法仍然可以访问 ThisTest类的成员变量。如果以上代码在 ActionScript 2.0 中运行, this引用会匹配,但 num 变量将为 undefined

绑定方法最值得注意的一种情况是使用事件处理函数,因为 addEventListener()方法要求

将函数或方法作为参数来传递

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值