Flex命名空间本质
命名空间,即namespace。
Namespace类对象,只有两个属性,prefix和uri。Prefix,即前缀,在XML时才会用到。而uri属性是一个字符串类型,记录着Namespace对象的URI。URI是The Uniform Resource Identifier(统一资源定位符)的简写。Namespace的toString()和valueOf()都可以返回Namespace对象的uri属性。
Namespace的定义,即命名空间的定义是唯一的,唯一性是命名空间能够正常运转的前提,而且这个唯一性体现在uri属性值的唯一性。只有uri属性唯一,才能保证Namespace唯一。
保证uri唯一的两种方法:
1,明白无误地给uri赋一个独一无二的字符串。
public namespace mx_internal = "http://www.adobe.com/2006/flex/mx/internal";
2,让系统自动生成
namespace roy;
定义命名空间
1,定义在独立的.as文件中。
创建一个以命名空间的名字命名的“.as”文件,再在其中写入namespace的定义
2,定义在类中
命名空前可以有访问控制符,代码如下
class Foo
{
public namespace good;
public namespace bad;
public function getName():Namespace
{
return good;
}
good function hello():void
{
trace("Nice to meet you");
}
bad fuction hello():void
{
trace("Who are you?");
}
}
仅能通过Foo.good、Foo.bad来访问。说明使用namespace在类体中定义命名空间,则命名空间不是依附于每个实例的,而是相当于一种静态成员,属于整个类。
应用命名空间
class Foo
{
public namespace good;
public namespace bad;
public function getName():Namespace
{
return good;
}
good function hello():void
{
trace("Nice to meet you");
}
bad fuction hello():void
{
trace("Who are you?");
}
}
如上面红色代码所显示,表示在命名空间good和bad中分别放入了hello函数,但是是完全不同的两个方法。
在应用命名空间是要注意,每个类成员只可以应用一个命名空间。
打开命名空间(use namespace)
1,use namespace编译时会被提到前端,而且一旦打开,无法再关闭。
use namespace good;
var foo:Foo = new Foo();
foo.hello();
use namesapce bad;
以上代码会出现编译错误,因为use namespace在编译时会提前,因此,代码原型为:
use namespace good;
use namesapce bad;
var foo:Foo = new Foo();
foo.hello(); //hello()因为同时打开了两个命名空间,导致了模糊引用,编译出错。
2,use namespace指令不受上下文逻辑影响
只要任何一个地方出现了use namespace指令都会被直接提前,不受上下文逻辑影响。