每次,任何一种新语言学习,都得从基础开始。
- 编程基础
- 变量和常量
在ActionScript中,创建一个变量,使用var语句:
var age:Number;
也可以立即初始化:
var age:Number = 23; - 数据类型
2.1 String: 字符串类型,跟Java一样
2.2 Numeric 一共三中numeric类型
2.2.1 Number: 任何数值,包括 有小数部分或者没有小数部分的值
2.2.2 Int: 整数(不带小数部分的整数)
2.2.3 Uint: 不能为负数的整数
2.3 Boolean: boolean - 对象
ActionScript中,任何类都有三中类型的特征:
1. 属性
2. 方法
3. 事件 - 属性 跟 方法跟Java类似
- 函数
function eventResponse(eventObject:EventType):void
{
// 此处是为响应事件而执行的动作。
}
eventSource.addEventListener(EventType.EVENT_NAME, eventResponse);
“函数”提供一种将若干个动作组合在一起、用类似于快捷名称的单个名称来执行这些动作的
方法。函数与方法完全相同,只是不必与特定类关联(事实上,方法可以被定义为与特定类关
联的函数) 。在创建事件处理函数时,必须选择函数名称 (本例中为 eventResponse) ,还必
须指定一个参数(本例中的名称为 eventObject) 。指定函数参数类似于声明变量,所以还必
须指明参数的数据类型。将为每个事件定义一个 ActionScript 类,并且为函数参数指定的数据
类型始终是与要响应的特定事件关联的类。最后,在左大括号与右大括号之间 ({ ...}),编写您
希望计算机在事件发生时执行的指令。
一旦编写了事件处理函数,就需要通知事件源对象(发生事件的对象,如按钮)您希望在该
事件发生时调用函数。可通过调用该对象的 addEventListener() 方法来实现此目的(所有
具有事件的对象都同时具有 addEventListener() 方法)。addEventListener() 方法有两
个参数:
■ 第一个参数是您希望响应的特定事件的名称。同样,每个事件都与一个特定类关联,而
该类将为每个事件预定义一个特殊值;类似于事件自己的唯一名称 (应将其用于第一个
参数) 。
■ 第二个参数是事件响应函数的名称。请注意,如果将函数名称作为参数进行传递,则在
写入函数名称时不使用括号。 - 创建对象实例
借助几个 ActionScript 数据类型,可以使用“文本表达式” (直接写入
ActionScript 代码的值)创建一个实例。一些示例:
■ 文本数字值 (直接输入数字) :
var someNumber:Number = 17.239;
var someNegativeInteger:int = -53;
var someUint:uint = 22;
■ 文本字符串值 (用双引号将本文引起来) :
var firstName:String = "George";
var soliloquy:String = "To be or not to be, that is the question...";
■ 文本布尔值 (使用字面值 true 或 false):
var niceWeather:Boolean = true;
var playingOutside:Boolean = false;
■ 文本 XML 值 (直接输入 XML) :
var employee:XML = <employee>
<firstName>Harold</firstName>
<lastName>Webster</lastName>
</employee>;
ActionScript 还为 Array、RegExp、Object 和 Function 数据类型定义了文本表达式。
对于其它任何数据类型而言,要创建一个对象实例,应将 new 运算符与类名一起使用,如下
所示:
var raceCar:MovieClip = new MovieClip();
var birthday:Date = new Date(2006, 7, 9); - 运算符
ActionScript中的运算符 (==) ,跟Java不一样,Java是看两个对象内存地址是否相同,而这个是
看值是否相等,跟Java的 Object#equals(Object obj)差不多。计算结果是Boolean.
if (dayOfWeek == "Wednesday")
{
foo();
}
主要运算符
主要运算符包括那些用来创建 Array 和 Object 字面值、对表达式进行分组、调用函数、实
例化类实例以及访问属性的运算符。
下表列出了所有主要运算符,它们具有相同的优先级。属于 E4X 规范的运算符用 (E4X) 来
表示。
[] 初始化数组 {x:y} 初始化对象 () 对表达式进行分组 f(x) 调用函数 new 调用构造函数 x.y x[y] 访问属性 <></> 初始化 XMLList 对象 (E4X) @ 访问属性 (E4X) :: 限定名称 (E4X) .. 访问子级 XML 元素 (E4X)
- 变量和常量
- ActionScript 开发过程
无论 ActionScript 项目是大还是小,遵循一个过程来设计和开发应用程序都有助于您提高
工作效率。下面几个步骤说明了构建使用 ActionScript 3.0 的应用程序的基本开发过程:
- 设计应用程序。
您应先以某种方式描述应用程序,然后再开始构建该应用程序。
- 编写 ActionScript 3.0 代码。
您可以使用 Flash、 Flex Builder、 Dreamweaver 或文本编辑器来创建 ActionScript 代码。
- 创建 Flash 或 Flex 应用程序文件来运行代码。
在 Flash 创作工具中,此步骤包括:创建新的 FLA 文件、设置发布设置、向应用程序添加
用户界面组件以及引用 ActionScript 代码。在 Flex 开发环境中,创建新的应用程序文件
涉及:定义该应用程序并使用 MXML 来添加用户界面组件以及引用 ActionScript 代码
- 设计应用程序。
-
- 第一,必须使用 namespace 关键字来定义命名空间。
例如,下面的代码定义 version1 命名空间:
namespace version1; - 第二,在属性或方法声明中,使用命名空间(而非访问控制说明符)来应用命名空间。
下面的示例将一个名为 myFunction() 的函数放在 version1 命名空间中:
version1 function myFunction() {
} - 第三,在应用了该命名空间后,可以使用 use 指令引用它,也可以使用该命名空间来
限定标识符的名称。下面的示例通过 use 指令来引用 myFunction() 函数:
use namespace version1;
myFunction();
您还可以使用限定名称来引用 myFunction() 函数,如下面的示例所示:
version1::myFunction();
- 第一,必须使用 namespace 关键字来定义命名空间。
- 使用命名空间时,应遵循以下三个基本步骤:
- 在应用命名空间时,应切记以下几点:
- 对于每个声明只能应用一个命名空间。
- 不能一次将同一个命名空间属性应用于多个定义。换言之,如果您希望将自己的命名空
间应用于 10 个不同的函数,则必须将该命名空间作为属性分别添加到这 10 个函数的定
义中。 - 如果您应用了命名空间,则不能同时指定访问控制说明符,因为命名空间和访问控制说
明符是互斥的。换言之,如果应用了命名空间,就不能将函数或属性声明为 public、
private、protected 或 internal。
- 动态类
“动态”类定义在运行时可通过添加 /更改属性和方法来改变的对象。非动态类 (如 String
类)是 “密封”类。您不能在运行时向密封类中添加属性或方法。
在声明类时,可以通过使用 dynamic 属性来创建动态类。例如,下面的代码创建一个名为
Protean 的动态类:
dynamic class Protean
{
private var privateGreeting:String = "hi";
public var publicGreeting:String = "hello";
function Protean()
{
trace("Protean instance created");
}
}
如果要在以后实例化 Protean 类的实例,则可以在类定义的外部向该类中添加属性或方法。
例如,下面的代码创建 Protean 类的一个实例,并向该实例中添加两个名称分别为 aString
和 aNumber 的属性:
var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
trace(myProtean.aString, myProtean.aNumber); // 测试 3
添加到动态类实例中的属性是运行时实体,因此会在运行时完成所有类型检查。不能向以这
种方式添加的属性中添加类型注释。
您还可以定义一个函数并将该函数附加到 myProtean 实例的某个属性,从而向 myProtean
实例中添加方法。下面的代码将 trace 语句移到一个名为 traceProtean() 的方法中:
var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
myProtean.traceProtean = function ()
{
trace(this.aString, this.aNumber);
};
myProtean.traceProtean(); // 测试 3
但是,以这种方式创建的方法对于 Protean 类的任何私有属性或方法都不具有访问权限。而
且,即使对 Protean 类的公共属性或方法的引用也必须用 this 关键字或类名进行限定。下面
的示例说明了 traceProtean() 方法,该方法尝试访问 Protean 类的私有变量和公共变量。
myProtean.traceProtean = function ()
{
trace(myProtean.privateGreeting); // undefined
trace(myProtean.publicGreeting); // hello
};
myProtean.traceProtean();