当前位置:七道奇文章资讯设计学堂Flash设计
日期:2009-04-04 01:25:00  来源:本站整理

<b>Flash AS高级知识:深化理解Function</b>[Flash设计]

赞助商链接



  本文“<b>Flash AS高级知识:深化理解Function</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)范例.与主题扯远了,打住.

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这样的倒序来履行操作.

这个本领还有很多可以延伸的地方,比方说动态掌握操作函数的参数等等,供大家自己研究扩大.

未完,持续更新中,下一节介绍Function更深层次的应用:动态属性的应用

下一篇:Flash ActionScript高级本领:深化理解Function(2)


  以上是“<b>Flash AS高级知识:深化理解Function</b>[Flash设计]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .