Function究竟是什么?
我们习惯了function的存在,就像习惯了我们呼吸的空气却不去探究它的本质。看起来,似乎function和Number, Boolean, String一样都是ActionScript本来就有的类型。
先看以下代码:
第一行告诉我们aFunc的类型是Function, 第二行又证实了这一点aFunc确实是一个Function类型的实例,第三行更加有意思告诉我们aFunc是一个Object。
初学者可能很惊奇,其实AS2.0中除了原始数据类型Number, Boolean, String,undefined, null,其余全是Object. 而AS3.0中则更加极端,一切皆对象。包括原始数据类型也是Object,只不过是特殊的不变对象(immutable objects)类型。与主题扯远了,打住。
Function本质上到底是怎样的一种Object?
与其他编程语言不同,在AS中, Function是一个Object,可以有独立的属性甚至方法。比如arguments,callee,caller。在AS3.0中,Function还由更多的属性。
函数一旦执行,一个特殊的对象就建立了。我们称它为"active object",它含有以上的属性和本地变量。这个对象我们是不可访问的,属于内建的机制。同时,每个Function都含有一个内置的范围链(scope chain),这时也将被建立,以使Flash Player来检查所有的声明。函数可以层层嵌套,范围链也是如此。最大的范围链那当然是Global函数的范围链了,包括所有的全局变量和函数。
知道了Function 是Object又怎样?
会给我们带来极大的便利和编程思维的改变:
运用一:这是简单运用, 设立一个代理函数对象,根据条件的不同,将它指向不同的函数,实现动态改变。相信有经验的程序员都了解动态改变函数的便利性。而且由于AS提供了这种便利,运用这个特性可以衍生大量技巧。
运用二:建立函数执行队列。
比如说,我有一个对象,我想根据不同的情况对它进行一系列的操作。但是有时需要所有的操作,有时又只需要一部分的操作。那么这个较高级的技巧,就能保证代码的高度重用性和简洁。
输出内容为:
aFunc()
bFunc()
cFunc()
cFuncExected:true
bFuncExected:true
aFuncExected:true
前三行表明a,b,c三个函数按顺序执行了。后三行表明orginObject确实经过了三步操作,多了三个为true的属性。
黑羽提醒:技巧可以再延深!
可以通过一个函数来管理队列里面各个元素的位置,达到改变操作函数的顺序。比如通过一个数组来安排调用顺序
var operationAry:Array = [2,1,0]
for(var i:Number = 0; i<operationAry.length; i ++) {
funcAry[operationAry[i]](originObject);
}
这样函数就通过2,1,0这样的倒序来执行操作。
这个技巧还有很多可以延伸的地方,比如说动态控制操作函数的参数等等,供大家自己研究扩展。
var funcAry:Array = new Array();
//将需要的操作步骤加入队列
funcAry.push(aFunc);
funcAry.push(bFunc);
funcAry.push(cFunc);
//供操作的对象
var originObject:Object = new Object();
//需要执行几步由execQueue这个参数决定,在实际工程运用中这个数可能是动态决定的。
var execQueue:Number = funcAry.length;
/核心步骤:/函数队列执行。实际运用中可以把它包装成一个函数,或者一个类的实例。
for (var i:Number =0; i<execQueue; i++) {
funcAry[i](originObject);
}
//trace出执行操作后的originObject里面的内容
for (var i in originObject) {
trace ( i + ":" + originObject[i]);
}
//操作步骤a,b,c
function aFunc(eO:Object) {
eO.aFuncExected = true;
trace ("aFunc()");
}
function bFunc(eO:Object) {
eO.bFuncExected = true;
trace ("bFunc()");
}
function cFunc(eO:Object) {
eO.cFuncExected = true;
trace ("cFunc()");
}
var kingdaFunc:Function;
var sex:String = "male";
if ( sex == "male") {
kingdaFunc = maleFunc;
} else {
kingdaFunc = femailFunc;
}
kingdaFunc(); //输出: I am a boy
function maleFunc() {
trace ("I am a boy");
}
function femaleFunc() {
trace ("I am a girl");
}
trace (aFunc); //输出:[type Function]
trace (aFunc instanceof Function); //输出:true
trace (aFunc instanceof Object); //输出:true
function aFunc() {
trace (“This is aFunc!Excuted!”);
}
分享到:
相关推荐
在ActionScript中,`Function`是一种非常核心的类型,它允许我们定义可执行的代码块,也就是函数。函数是ActionScript编程中的基本构建模块,它们可以封装特定的任务,使其可以在程序的不同部分重复使用,提高代码的...
1. 变量:ActionScript中的变量定义使用var关键字,例如`var myVariable:Type;`。类型可以是基本数据类型(如Number、String、Boolean等)或自定义类。 2. 函数:函数定义使用function关键字,如`function ...
ActionScript中的数据类型分为原始类型和引用类型。原始类型包括字符串、数字、布尔值、未定义和空。字符串是字符的序列,如"I know him; Marley's Ghost!",数字可以是整数或浮点数,布尔值为true或false。类型转换...
在ActionScript 2.0中,可以通过显式声明变量的数据类型来提高代码的可读性和健壮性。 - **未指定类型**:例如 `var count;` 表示声明了一个未指定类型的变量 `count`。 - **指定类型**:例如 `var count:Number;` ...
在Flash中,ActionScript可以根据其载体的不同分为两大类:一类位于帧(Frame)上,另一类则嵌入到按钮(Button Symbol)中。 - **帧上的ActionScript**:这类ActionScript主要负责控制时间轴上的事件,如播放、...
然而,ActionScript 3是随着Flash Player 9引入的新版本,基于ECMAScript 3的一个严格子集,具有更强的类型系统和性能提升。在AS3中,弹出窗口的实现更加灵活且面向对象。AS3引入了DisplayObjectContainer接口和...
### Flex中ActionScript动态调用RemoteObject类 在Flex中,使用ActionScript动态调用RemoteObject类是一种常见的实现客户端与服务器端交互的方式。通过这种方式,开发者可以在客户端灵活地调用服务器端的服务,并...
在Flash开发中,ActionScript3(AS3)是强大的编程语言,用于创建交互式内容、游戏和动画。本教程将详细讲解如何使用AS3在影片剪辑中加载一张网络图片,这一过程对于网页设计、在线游戏开发以及动态展示制作至关重要...
在ActionScript中,解析Zip文件是一项常见的任务,特别是在开发Flash或Flex应用时,可能需要将Zip文件中的资源加载到应用程序中。ActionScript是Adobe Flash Platform的主要编程语言,它基于ECMAScript,允许开发者...
ActionScript 3支持两种类型的注释:单行注释(使用双斜杠 `//` 开头)和多行注释(使用 `/*` 开始并以 `*/` 结束)。例如: ```as // 这是一个单行注释 /* 这是一个 多行注释 */ ``` 注释还可以用来暂时禁用代码的...
6. **缓动函数(Easing Function)**:在动画中,为了获得更流畅、自然的过渡效果,可以使用缓动函数。ActionScript3.0中虽然没有内置的缓动函数库,但可以通过第三方库如TweenMax或GreenSock轻松引入。 7. **事件...
在Flex开发中,ActionScript是主要的编程语言,用于创建富互联网应用程序(RIA)。当我们需要与服务器进行数据交互,特别是调用Web服务时,ActionScript提供了强大的支持。本篇文章将详细探讨Flex ActionScript如何...
1. **ActionScript基础**:首先需要理解ActionScript的基本语法和结构,包括变量定义、数据类型、函数、类和对象等概念。ActionScript 3.0是目前最常用的一个版本,它具有面向对象的特性,使得代码更加结构化和易于...
为了解决这个问题,可以通过在构造函数中添加一个强制类型参数来阻止外部直接实例化该类。示例代码如下: ```as public class MyClass { private static var _instance:MyClass; public function MyClass...
在深入探讨Flash ActionScript 3 (AS3) 的殿堂之路之前,我们首先需要理解AS3中的数据类型和变量声明的基本概念。AS3是一门面向对象的编程语言,它的一个核心特性是“一切都是对象”(Everything is an Object)。这...
- **数据类型**:ActionScript 3.0支持多种数据类型,包括数字、字符串、布尔值等。 - **处理对象**:一切皆对象,包括数字、函数等。每个对象都有其属性和方法。 ##### 常用编程元素 - **属性**:对象的状态,如...
在ActionScript 3.0中,它还可以用于字符串连接。 **示例代码:** ```actionscript var x:Number = 5; var y:Number = 10; trace(x + y); // 输出 15 ``` **字符串连接示例:** ```actionscript var name:String =...
在ActionScript中,通过定义类,开发者可以创建自定义的对象类型,并利用这些对象来封装数据和行为。例如,可以定义一个`Person`类来表示一个人的信息,其中包含姓名、年龄等属性,以及`sayHello`等方法。 #### 4. ...