<b>深化理解ActionScript高级本领</b>[Flash设计]
本文“<b>深化理解ActionScript高级本领</b>[Flash设计]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Function毕竟是什么?
我们习惯了function的存在,就像习惯了我们呼吸的空气却不去根究它的本质.看起来,仿佛function和Number, Boolean, String一样都是ActionScript本来就有的范例
先看以下代码:
trace (aFunc); //输出:[type Function]
trace (aFunc instanceof Function); //输出:true
trace (aFunc instanceof Object); //输出:true
function aFunc() {
trace (“This is aFunc!Excuted!”);
}
第一行奉告我们aFunc的范例是Function, 第二行又证实了这一点aFunc确切是一个Function范例的实例,第三行越发有意思奉告我们aFunc是一个Object.
初学者大概很诧异,其实AS2.0中除了原始数据范例Number, Boolean, String,undefined, null,别的满是Object. 而AS3.0中则越发极度,一切皆对象.包含原始数据范例也是Object,只不过是特别的不变对象(immutable objects)范例.与主题扯远了,打住.:D
Function本质上毕竟是怎样的一种Object?
与其他编程语言差别,在AS中, Function是一个Object,可以有独立的属性乃至办法.比方arguments,callee,caller.在AS3.0中,Function还由更多的属性.
函数一旦履行,一个特别的对象就成立了.我们称它为"active object",它含有以上的属性和本地变量.这个对象我们是不可拜候的,属于内建的机制.同时,每个Function都含有一个内置的范围链(scope chain),这时也将被成立,以使Flash Player来查抄全部的声明.函数可以层层嵌套,范围链也是如此.最大的范围链那当然是Global函数的范围链了,包含全部的全局变量和函数.
第一行奉告我们aFunc的范例是Function, 第二行又证实了这一点aFunc确切是一个Function范例的实例,第三行越发有意思奉告我们aFunc是一个Object.
初学者大概很诧异,其实AS2.0中除了原始数据范例Number, Boolean, String,undefined, null,别的满是Object. 而AS3.0中则越发极度,一切皆对象.包含原始数据范例也是Object,只不过是特别的不变对象(immutable objects)范例.与主题扯远了,打住.:D
Function本质上毕竟是怎样的一种Object?
与其他编程语言差别,在AS中, Function是一个Object,可以有独立的属性乃至办法.比方arguments,callee,caller.在AS3.0中,Function还由更多的属性.
函数一旦履行,一个特别的对象就成立了.我们称它为"active object",它含有以上的属性和本地变量.这个对象我们是不可拜候的,属于内建的机制.同时,每个Function都含有一个内置的范围链(scope chain),这时也将被成立,以使Flash Player来查抄全部的声明.函数可以层层嵌套,范围链也是如此.最大的范围链那当然是Global函数的范围链了,包含全部的全局变量和函数.
知道了Function 是Object又怎样?
会给我们带来极大的便利和编程思维的改变:
应用一:这是简单应用, 设立一个代理函数对象,按照条件的差别,将它指向差别的函数,实现动态改变.相信有经验的程序员都理解动态改变函数的便利性.并且由于AS供应了这种便利,应用这个特点可以衍生大量本领.
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");
}
应用二:成立函数履行行列.
比方说,我有一个对象,我想按照差别的情形对它举行一系列的操作.但是有时需求全部的操作,有时又只需求一部份的操作.那么这个较高级的本领,就可以保证代码的高度重用性和简便.
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
funcAry[i](originObject);
}
//trace出履行操作后的originObject里面的内容
for (var i in originObject) {
trace ( i + ":" + originObject[i]);
}
//操作步骤a,b,c
function aFunc(eObject) {
eO.aFuncExected = true;
trace ("aFunc()");
}
function bFunc(eObject) {
eO.bFuncExected = true;
trace ("bFunc()");
}
function cFunc(eObject) {
eO.cFuncExected = true;
trace ("cFunc()");
}
输出内容为:
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
funcAry[operationAry[i]](originObject);
}
这样函数就通过2,1,0这样的倒序来履行操作.
这个本领还有很多可以延伸的地方,比方说动态掌握操作函数的参数等等,供大家自己研究扩大.
以上是“<b>深化理解ActionScript高级本领</b>[Flash设计]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |