Flash Action Script 3.0 学习之语法

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

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

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

someFunction.counter = 0// 自定义函数属性
function someFunction():void
{
     someFunction.counter
++;
}


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

function getNameAndVersion():String
{
     function getVersion():String
     
{
         
return "9";
     }


     function getProductName():String
     
{
         
return "Flash Player";
     }


     
return (getProductName() + " " + getVersion());
}


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

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

    
return rectArea; // 返回函数引用
}


function bar():
void
{
    var x:
int = 2;
    var y:
int = 4;
    var myProduct:Function 
= foo();
    
// 调用函数闭包
     
// 这里是这样调用的
     
// 1,调用foo()返回rectArea函数对象
     
// 2,再调用rectArea(4) 
    trace(myProduct(4)); 
}

bar(); 
// 160


posted @ 2007-08-12 17:31  moonz-wu  阅读(1134)  评论(2编辑  收藏  举报