Flash Action Script 3.0 学习之语法

作为一种高级语言,as3.0的语法于大多数高级语言的语法很象,不过还是有些细微的区别。

命名空间与包的概念
今天在看到命名空间与包的时候,看着看着就糊涂了在java中包起限制访问域作用的,在.net中命名空间(namespace)也是起类似作用的。可为什么在as3中同时存在命名空间和包呢?这是我带这疑问去看的。看到了最后我才明白在as3中包是起限制访问域的作用的,并且包还对于到了物理结构的folder(即包名对应工程路径下的folder名),而命名空间的作用有点像访问限制符(public , private , protected , internal)的作用,只是你可以自己选择开放那些对象到全局空间中,所以说我想域访问作用符可能是用命名空间实现的。

函数概念
在action script中函数是一个很重要的概念,它的很多方式与其他高级语言中的函数概念有所不同。第一,函数是一个对象,那么既然是一个对象就要有属性和方法,对于as的函数来说函数的属性是可以在函数外部定义的,如

None.gif someFunction.counter  =   0 //  自定义函数属性
None.gif
function someFunction(): void
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif     someFunction.counter
++;
ExpandedBlockEnd.gif}


第二,函数可以内嵌函数,并且内嵌的函数也可以象参数一样传递到外部。

None.gif function getNameAndVersion():String
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif     function getVersion():String
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif         
return "9";
ExpandedSubBlockEnd.gif     }

InBlock.gif
InBlock.gif     function getProductName():String
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif         
return "Flash Player";
ExpandedSubBlockEnd.gif     }

InBlock.gif
InBlock.gif     
return (getProductName() + " " + getVersion());
ExpandedBlockEnd.gif}


第三,函数闭包概念,在adobe的官方文件上说函数闭包是一个对象,其中包含函数的快照及其“词汇环境”。这个听起来有点迷糊,快照??词汇环境??我个人对函数闭包的理解是函数对象的引用,它包含完整的函数信息,有点类似于c++中的函数指针(只是类似哦)。下面的代码可以很清晰的说明问题:

None.gif function foo():Function
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    var x:
int = 40// 注意这个变量的作用域, 这里就是所谓的函数闭包保留定义它们的作用域
InBlock.gif
    function rectArea(y:int):int // 定义函数闭包
ExpandedSubBlockStart.gifContractedSubBlock.gif
    dot.gif{
InBlock.gif        
return x * y
ExpandedSubBlockEnd.gif    }

InBlock.gif    
return rectArea; // 返回函数引用
ExpandedBlockEnd.gif
}

None.gif
None.giffunction bar():
void
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    var x:
int = 2;
InBlock.gif    var y:
int = 4;
InBlock.gif    var myProduct:Function 
= foo();
InBlock.gif    
// 调用函数闭包
InBlock.gif     
// 这里是这样调用的
InBlock.gif     
// 1,调用foo()返回rectArea函数对象
InBlock.gif     
// 2,再调用rectArea(4) 
InBlock.gif
    trace(myProduct(4)); 
ExpandedBlockEnd.gif}

None.gifbar(); 
//  160


转载于:https://www.cnblogs.com/moonz-wu/archive/2007/08/12/851059.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值