`

Actionscript学习笔记

    博客分类:
  • Flex
 
阅读更多


1、  addEventListener()
方法有两个参数:

第一个参数是您希望响应的特定事件的名称。同样,每个事件都与一个特定类关联,而

该类将为每个事件预定义一个特殊值;类似于事件自己的唯一名称(应将其用于第一个

参数)。

第二个参数是事件响应函数的名称。请注意,如果将函数名称作为参数进行传递,则在

写入函数名称时不使用括号。

如:创建一个侦听器函数,在单击名为 myButton 的对象时将调用该函数。

function eventResponse(event:MouseEvent):void

{

// 此处是为响应事件而执行的动作。

}

myButton.addEventListener(MouseEvent.CLICK, eventResponse);

 

2、  数据类型

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

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

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

文本 XML值(直接输入 XML):

var employee:XML = <employee>

<firstName>Harold</firstName>

<lastName>Webster</lastName>

</employee>;

3ActionScript 3.0 引入了无类型变量这一概念,这一类变量可通过以下两种方法来

指定:

var someObj:*;

var someObj;

无类型变量与 Object 类型的变量不同。二者的主要区别在于无类型变量可以保存特殊值

undefined,而 Object 类型的变量则不能保存该值。

 

ActionScript 3.0 则不同,它既不支持嵌套类也不支持私有类。

 

3、   

1)如果用于局部变量的变量名已经被声明为全局变量,那么,当局部变量在作用域内时,局部定义会隐藏(或遮蔽)全局定义。全局变量在该函数外部仍然存在。

2)如果您在某个代码块中声明一个变量,那么,该变量不仅在该代码块中可用,而且还在该代码块所属函数的其它任何部分都可用。

3)如果缺乏块级作用域,那么,只要在函数结束之前对变量进行声明,就可以在声

明变量之前读写它。这是由于存在一种名为“提升”的方法,该方法表示编译器会将所有的

变量声明移到函数的顶部。但是,编译器将不会提升任何赋值语句。如:

trace(num); // NaN

var num:Number = 10;

trace(num); // 10

 

4ActionScript 3.0是动态类型的语言,它在运行时执行类型检查,同时也支持在名为“严格模式”的特殊编译

器模式下在编译时执行类型检查。在严格模式下,类型检查既发生在编译时也发生在运行

时,但是在标准模式下,类型检查仅发生在运行时。

 

4、  is 运算符

它可用来测试变量或表达式是否为给定数据类型的成员。is 运算符检查正确的继承层次结构,不但可以用来检查对象是否为特定类的实例,而且还可以检查对象是否是用来实现特定接口的类的实例。例如:

var mySprite:Sprite = new Sprite();

trace(mySprite is Sprite); // true

trace(mySprite is DisplayObject); // true

trace(mySprite is IEventDispatcher); // true

 

5、  as 运算符

as 运算符是 ActionScript 3.0 中的新增运算符,也可用来检查表达式是否为给定数据类型的成员。但是,与 is 运算符不同的是,as 运算符不返回布尔值,而是返回表达式的值(代替 true)或 null (代替 false)。例如:

var mySprite:Sprite = new Sprite();    

trace(mySprite as Sprite); // [object Sprite]    

trace(mySprite as DisplayObject); // [object Sprite]    

trace(mySprite as IEventDispatcher); // [object Sprite]    

trace(mySprite as Number);   // null

在使用 as 运算符时,右侧的操作数必须是数据类型。如果尝试使用表达式 (而非数据类型)作为右侧的操作数,将会产生错误。  

6、  动态类

“动态”类是定义在运行时可通过添加/ 更改属性和方法来改变的对象。非动态类(如 String类)是“密封”类。您不能在运行时向密封类中添加属性或方法。在声明类时,可以通过使用 dynamic 属性来创建动态类。如:

dynamic class Protean{}

下面的代码创建 Protean 类的一个实例,并向该实例中添加两个名称分别为 aString

aNumber 的属性与一个方法:

var myProtean:Protean = new Protean();

myProtean.aString = "testing";

myProtean.aNumber = 3;

myProtean.traceProtean = function ()

{

trace(this.aString, this.aNumber);

};

myProtean.traceProtean(); // 测试 3

 

7、  数据类型说明

基元数据类型包括 BooleanintNullNumberStringuint void

ActionScript核心类还定义下列复杂数据类型:ObjectArrayDateErrorFunctionRegExpXML XMLList

Number 数据类型可以表示整数、无符号整数和浮点数。默认值为 NaN

uint 数据类型在内部存储为 32 位无符号整数,它包含一组介于 0 4,294,967,295 (232-1)之间的整数(包括 0 4,294,967,295)。

void 数据类型仅包含一个值:undefined

类型转换:

要将对象转换为另一类型,请用小括号括起对象名并在它前面加上新类型的名称。

var quantityField:String = "3";

var quantity:int = int(quantityField); // 显式转换成功。

如果 Flash Player 由于某种原因而无法转换某种数据类型的变量,则会将该变量赋予它的默认值。

对于包含非数字字符的字符串值,在用 int() uint() 转换时,将返回 0 ;在用 Number()

转换时,将返回 NaN。转换过程中会忽略前导和尾随空白,但是,如果字符串中包含将两个

数字隔开的空白,则将返回 0 NaN

在将字符串值转换为 Boolean 数据类型时,如果字符串为 null 或空字符串 (""),则会返回

false。否则,将返回 true

将其它数据类型转换为 String 数据类型时的结果:

Array               一个包含所有数组元素的字符串。

Boolean            "true" "false"

Date                Date 对象的字符串表示形式。

null                   "null"

Numberint uint          数字的字符串表示形式。

Object             如果实例为 null,则结果为 "null" ;否则为 "[object Object]"

 

声明对象:

(1)   数组

// 使用 new 语句。

var myStrings:Array = new Array(["alpha", "beta", "gamma"]);

// 直接赋予字面值。

var myStrings:Array = ["alpha", "beta", "gamma"];

(2)  初始化通用对象。通用对象是 Object 类的一个实例。对象字面值括在大括

({}) 中,各对象属性之间用逗号隔开。每个属性都用冒号字符 (:) 进行声明,冒号用于分

隔属性名和属性值。

// 使用 new 语句。

var myObject:Object = new Object({propA:1, propB:2, propC:3});

var myObject:Object = {propA:1, propB:2, propC:3};

 

(3)   常量

只能为常量赋值一次,而且必须在最接近常量声明的位置赋值。例如,如果将常量声明为类的成员,则只能在声明过程中或者在类构造函数中为常量赋值。

8、  运算符的优先级和结合律

除了赋值运算符之外,所有二进制运算符都是“左结合”的,也就是说,先处理左边的运算符,然后再处理右边的运算符。赋值运算符和条件运算符 (?:) 都是“右结合”的,也就是说,先处理右边的运算符,然后再处理左边的运算符。

9、  一元运算符

它们具有相同的优先级

++          递增(前缀)

--          递减(前缀)

+           一元 +

-           一元 - (非)

!           逻辑“非”

~           按位“非”

delete      删除属性

typeof      返回类型信息

void        返回 undefined

delete 运算符仅适用于对象的属性,不能删除方法

10、      主要运算符

主要运算符包括那些用来创建 Array Object 字面值、对表达式进行分组、调用函数、实例化类实例以及访问属性的运算符。

运算符    执行的运算

[]          初始化数组

{x:y}       初始化对象

()          对表达式进行分组

f(x)        调用函数

new         调用构造函数

x.y x[y]    访问属性

<></>       初始化 XMLList 对象 (E4X)

@           访问属性 (E4X)

::          限定名称 (E4X)

..          访问子级 XML 元素 (E4X)

1) 按位移位运算符

运算符        执行的运算

<<         按位向左移位

>>         按位向右移位

>>>        按位无符号向右移位

2) 关系运算符有两个操作数,它比较两个操作数的值,然后返回一个布尔值。

运算符        执行的运算

<          小于

>          大于

<=         小于或等于

>=         大于或等于

as         检查数据类型

in         检查对象属性

instanceof            检查原型链

is         检查数据类型

3等于运算符

运算符        执行的运算

==         等于

!=         不等于

===        严格等于

!==        严格不等于

 

11、         for each..in 循环

for each..in 循环用于循环访问集合中的项目,它可以是 XML XMLList 对象中的标签、对象属性保存的值或数组元素。与 for..in 循环不同的是,for each..in循环中的迭代变量包含属性所保存的值,而不包含属性的名称:

var myObj:Object = {x:20, y:30};

for each (var num in myObj)

{

trace(num);

}

// 输出:

// 20

// 30

 

12、       定义函数

ActionScript 3.0 中可通过两种方法来定义函数:使用函数语句和使用函数表达式。

1

函数语句是在严格模式下定义函数的首选方法。函数语句以 function 关键字开头。如:

function traceParameter(aParam:String)

{

trace(aParam);

}

traceParameter("hello"); // hello

 

2声明函数的第二种方法就是结合使用赋值语句和函数表达式,函数表达式有时也称为函数字

面值或匿名函数。例如:

var traceParameter:Function = function (aParam:String)

{

trace(aParam);

};

traceParameter("hello"); // hello

原则上,除非在特殊情况下要求使用表达式,否则应使用函数语句。函数语句较为简洁,而

且与函数表达式相比,更有助于保持严格模式和标准模式的一致性。

 

函数语句与函数表达式之间的区别:

1)第一个区别体现在内存管理和垃圾回收方面,因为函数表达式不像对象那样独立存在。

换言之,当您将某个函数表达式分配给另一个对象(如数组元素或对象属性)时,就会在代

码中创建对该函数表达式的唯一引用。如果该函数表达式所附加到的数组或对象脱离作用域

或由于其它原因不再可用,您将无法再访问该函数表达式。如果删除该数组或对象,该函数

表达式所使用的内存将符合垃圾回收条件,这意味着内存符合回收条件并且可重新用于其它

用途。

2)第二个区别是,函数语句存在于定义它们的整个作用域(包括出现在该函数语句前面的语句)内。与之相反,函数表达式只是为后续的语句定义的。

 

13、         arguments 对象:

在将参数传递给某个函数时,可以使用 arguments 对象来访问有关传递给该函数的参数的

信息。arguments 对象的一些重要方面包括:

arguments 对象是一个数组,其中包括传递给函数的所有参数。

arguments.length 属性报告传递给函数的参数数量。

arguments.callee 属性提供对函数本身的引用,该引用可用于递归调用函数表达式。

例如:

function traceArgArray(x:int):void

{

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

{

trace(arguments[i]);

}

}

traceArgArray(1, 2, 3);

// 输出:

// 1

// 2

// 3

 

14、           get set 存取器方法也称为 getter setter,可以使用这些函数为创建的类提供易于使用的编程接口,并遵循信息隐藏和封装的编程原则。

使用 getter setter 函数还可以覆盖从超类继承来的属性,这是使用常规类成员变量时不能做到的

ActionScript 3.0可以使用类或静态常量创建枚举。枚举类是使用 final 属性声明的,因为不需要扩展该类。ActionScript 3.0 并不支持具体的枚举工具,这与 C++ 使用 enum 关键字或 Java 使用 Enumeration 接口不一样。

如:public final class PrintJobOrientation

{

public static const LANDSCAPE:String = "landscape";

public static const PORTRAIT:String = "portrait";

}

 

15、         定义接口

ActionScript 3.0接口不能包含变量或常量,但是可以包含 getter setter。要定义接口,使用 interface 关键字。

只能使用 public internal 访问控制说明符来修饰接口定义。 接口定义中的方法声明不能包含任何访问控制说明符。

在实现接口的类中,实现的方法必须:

使用 public 访问控制标识符。

使用与接口方法相同的名称。

拥有相同数量的参数,每一个参数的数据类型都要与接口方法参数的数据类型相匹配。

使用相同的返回类型。

 

16、           覆盖方法

覆盖方法表示重新定义已继承方法的行为。静态方法不能继承,也不能覆盖。不能覆盖超类中定义的变量,但是可以覆盖 getter setter

 

17、          不继承静态属性

静态属性不由子类继承。这意味着不能通过子类的实例访问静态属性。只能通过定义静态属性的类对象来访问静态属性。

虽然并不继承静态属性,但是静态属性在定义它们的类或该类的任何子类的作用域链中。同

样,可以认为静态属性在定义它们的类和任何子类的“作用域”中。这意味着在定义静态属

性的类体及该类的任何子类中可直接访问静态属性。例如:

class Base {

public static var test:String = "static";

}

class Extender extends Base

{

public function Extender()

{

trace(test); // 输出:静态

}

}

允许使用与静态属性相同的名称定义实例属性。可以在与静态属性相同的类中或在子类中

定义这样的实例属性。例:

class Base

{

public static var test:String = "static";

public var test:String = "instance";

}

如果使用与同类或超类中的静态属性相同的名称定义实例属性,则实例属性在作用域链中的

优先级比较高。

 

18、        管理日历日期和时间

UTC 是一种标准时间定义(19701 1 日午夜),它实质上与格林尼治标准时间 (GMT)相同。

getTimezoneOffset() 方法,该方法返回的值表示 Date 对象的时区与 UTC 之间相差的分钟数。

Timer类:

ActionScript 3.0 中处理计时函数的首选方式是使用 Timer (flash.utils.Timer),可以使用它在每次达到间隔时调度事件。例如,下列代码创建一个每秒调度一个事件且持续 60 秒的 Timer 实例:

var oneMinuteTimer:Timer = new Timer(1000, 60);

如果将 Timer 实例设置为固定的间隔数,则在达到最后一次间隔时,它还会调度timerComplete 事件

 

19、        数组

ActionScript 3.0 不支持“指定类型的数组”概念,也就是说,不能指定数组的所有元素都属于特定数据类型。

创建数组:

第一种,如果调用不带参数的构造函数,会得到空数组。var names:Array = new Array();

第二种,如果将一个数字用作 Array 构造函数的唯一参数,则会创建长度等于此数值的数

组,并且每个元素的值都设置为 undefined

var names:Array = new Array(3);

trace(names.length); // 输出:3

第三种,如果调用构造函数并传递一个元素列表作为参数,将创建具有与每个参数对应的元

素的数组。

var names:Array = new Array("John", "Jane", "David");

也可以创建具有数组文本或对象文本的数组。可以将数组文本直接分配给数组变量。

var names:Array = ["John", "Jane", "David"];

 

插入数组元素:

可以使用 Array 类的三种方法(push()unshift() splice())将元素插入数组。push()

方法用于在数组末尾添加一个或多个元素。unshift() 方法用于在数组开头插入一个或多个元素,并且始

终在索引号 0 处插入。splice() 方法用于在数组中的指定索引处插入任意数目的项目,传递给 splice() 的第一个参数是整数 1,它用于指示从索引 1 处开始插入。传递给 splice() 的第二个参数是整数 0,它表示不应删除任何项。传递给 splice() 的第三和第四个参数 Venus Earth 为要插入的项。使用如下:

var planets:Array = new Array();

planets.push("Mars"); // 数组内容:Mars

planets.unshift("Mercury"); // 数组内容:Mercury,Mars

planets.splice(1, 0, "Venus", "Earth");

trace(planets); // 数组内容:Mercury,Venus,Earth,Mars

 

删除数组元素:

可以使用 Array 类的三种方法(pop()shift() splice())从数组中删除元素。pop()

方法用于从数组末尾删除一个元素。shift()方法用于从数组开头删除一个元素。splice()

方法既可用来插入元素,也可以删除任意数目的元素,其操作的起始位置位于由发送到此方

法的第一个参数指定的索引号处。使用如下:

var oceans:Array = ["Victoria", "Pacific", "Aral", "Superior", "Indian","Huron"];

oceans.splice(2, 2, "Arctic", "Atlantic"); // 替换 Aral Superior

oceans.pop(); // 删除 Huron

oceans.shift(); // 删除 Victoria

trace(oceans); // 输出:Pacific,Arctic,Atlantic,Indian

在数组元素上使用 delete 运算符。delete 运算符用于将数组元素的值设置为 undefined,但它不会从数组中删除元素。delete oceans[2];

可以使用数组的 length 属性截断数组。如果将数组的 length 属性设置为小于数组当前长度的值,则会截断数组,例如:

var oceans:Array = ["Arctic", "Pacific", "Victoria", "Aral", "Superior"];

oceans.length = 2;

trace(oceans); // 输出:Arctic,Pacific

 

数组排序:

可以使用三种方法(reverse()sort() sortOn())通过排序或反向排序来更改数组的顺序。reverse() 方法用于按照以下方式更改数组的顺序:最后一个元素变为第一个元素,倒数第二个元素变为第二个元素,依此类推。sort() 方法可用来按照多种预定义的方式对数组进行排序,甚至可用来创建自定义排序算法。

sortOn() 方法可用来对对象的索引数组进行排序,这些对象具有一个或多个可用作排序键的公共属性。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics