命名空间:如何控制未知方法的调用

命名空间:如何控制未知方法的调用

2010-05-01  程序员LIYI

,阅读约需 3 分钟

这篇文章属于 AS3 Expert 的一部分,单击链接查看所有内容。

命名空间对于程序员来讲,应当不会陌生,几乎每写一行代码,就要用到一止一个命名空间。AS3默认大约打开了6个命名空间。

1,AS3提供的常用的7个命名空间 #

internal,private,protected,public,static,as3,前5个命名空间作为类属性访问控制说明,在AS3中 是默认打开的。最后一个命名空间as3,默认也是被打开的,一般很少显式用到它。flash_proxy命名空间在控制动态方法调用时很有用,默认它是关 闭的。

internal作为默认的命名空间,当程序员未显式使用访问控制说明时,它即被默认。

2,如何继承Proxy实现匿名方法调用的控制 #

package
{
  import flash.display.Sprite;
  /**
   * @author 程序员LIYI <http://yishulun.com/>
   * Email: 9830131@qq.com
   */
  public class ProxyTest extends Sprite {
    public function ProxyTest() {
      super();
      var obj :MyClass = new MyClass();
      trace( obj.hello('sban') );
      // output: hello,sban
    }
  }
}
import flash.utils.Proxy;
import flash.utils.flash_proxy;

class MyClass extends Proxy {
  use namespace flash_proxy;
	override flash_proxy function callProperty(name:*, ...parameters):* {
    if ((name as QName).localName == 'hello') {
        return "hello," + parameters[0];
    }
    return null;
	}
}

上例代码演示了如何标题问题。需要指出,如果使用FB编译,需要反选"启用严格类型检查",否则编译不过。

3,如何自定义与使用命名空间 #

在单独一个文件中定义,一般位于*.core子包中:

package sban.as3Expert.core {
    public namespace as3internal = "https://yishulun.com/as3internal/2008";
}

namespace是FP内部一个特殊的基元类型,它有一个URI值,如果程序员在定义时不指定,编译器将随意分配一个,尽管如此,你也不要让编译器帮你指定,因为在多数情况下你需要明确知道你定义的命名空间是什么。

namespace可以理解为值类型,只要URI值相同,便是相同的namespace。

使用自定义的namespace之前,先引入,然后使用use namespace关键字:

import sban.as3Expert.core.as3internal;
use namespace as3internal;

4,包是什么? #

在AS2中,包路径并不是以package单独定义的,它位于Class Name之前,可以理解为类名称的一部分,如下:

class flash.display.BitmapData {}

在AS3中,包路径虽然以package关键字单独定义,但也可以把它理解为类名称的一部分,package与命名空间没有任何关系。AS3使用package定义包路径,与在AS2中使用class定义prototype继承机制的类对象一样,仅是语法甜头。

5,命名空间的无处不在 #

在AS3中,名字并不是唯一的标识符。在AS3中,name的含义往往包括两个部分:命名空间与名称标识。

public var s : String;

对于上面这例简短的代码,它已经包括两个命名空间,这两个命名空间含于两个QName中。QName是FP中内部名称的一种,在小标题2中,我们可以看到它。一个QName包括两个值,一个localName,是代码字面值,另一个是命名空间的uri值。

在上例代码中,包括一个命名空间为public、localName为s的QName,及一个命名空间为public、localName为String的QName。

2010年5月

版权声明

与友分享

网站访问量(PV): ,你是第 位访客(UV)