AS的名称空间/命名空间 On Actionscript's Namespaces
来源:互联网 发布:选软件网 编辑:程序博客网 时间:2024/05/17 02:28
一直以来对namespace似懂非懂,看了这篇文章,算是明白了:
http://riashanghai.com/zh-hant/node/4
什么是namespace?
从字面上看namespace代表一个域, 譬如red, blue, orange属于color namespace, 而apple, banana, orange属于fruit namespace. 细心的你是否注意到orange在这两个不同的namespaces里代表不同的事物, 即便它们的名字相同? 当只是提到orange的时候, 我们无法确定所指为何, 只有提供相关的namespaces, 我们才能确定.
为什么用它?
在Java或者AS里面, 我们通常使用package和访问控制修饰词public/private/internal/protected配合来定义一个元素(如class, object, property, variable, function)的可用范围(scope). 譬如, 在AS里, 一个protected的变量只能在定义它的类里面以及这个类的子类里面使用. 这样, 其它类无法操控这个变量, 从而可用提供对OO的一大特征encapsulation有一定保证.
但有时候package与访问控制修饰词并不能应付所有的情况. 考虑这样的情况: 你正在写一个framework或者library, 有很多个package, 有些程序元素你想让framework里面的其它程序可用调用但不想用户直接调用. 很明显, 要满足前者, 你得用public, 但后者却变成了不可能的任务.
namespace正是来处理这样的问题. 权限控制修饰词public/private/internal/protected往往是与package和class紧密结合的. namespace横跨package/class, 提供了更精确的scope控制方式.
怎么使用?
首先定义一个namespace (File: com/javaplusflex/ns/javaplusflex.as)
定义一个函数属于这个namespace:
调用namespace中的函数
通过use namespace简化一些
如果你在一个class大量使用某个namespace, 你可以使用use namespace把这个namespace打开(open), 从而省去在每个被调用元素前面写namespace的麻烦.
实现调用权限控制
在上面的例子, namespace只是强制函数的caller必须知道它在调用这个namespace中的函数, 只是起到一种警示作用. 对于绝大部分情况, 这已经足够了. 如果非得要实现调用权限控制, 这里是我写的一个例子:
调用:
========================================================
另一篇关于namespace的文章"When and how to use mx_internal in Flex"
http://xinsync.xju.edu.cn/index.php/archives/4872
http://riashanghai.com/zh-hant/node/4
什么是namespace?
从字面上看namespace代表一个域, 譬如red, blue, orange属于color namespace, 而apple, banana, orange属于fruit namespace. 细心的你是否注意到orange在这两个不同的namespaces里代表不同的事物, 即便它们的名字相同? 当只是提到orange的时候, 我们无法确定所指为何, 只有提供相关的namespaces, 我们才能确定.
为什么用它?
在Java或者AS里面, 我们通常使用package和访问控制修饰词public/private/internal/protected配合来定义一个元素(如class, object, property, variable, function)的可用范围(scope). 譬如, 在AS里, 一个protected的变量只能在定义它的类里面以及这个类的子类里面使用. 这样, 其它类无法操控这个变量, 从而可用提供对OO的一大特征encapsulation有一定保证.
但有时候package与访问控制修饰词并不能应付所有的情况. 考虑这样的情况: 你正在写一个framework或者library, 有很多个package, 有些程序元素你想让framework里面的其它程序可用调用但不想用户直接调用. 很明显, 要满足前者, 你得用public, 但后者却变成了不可能的任务.
namespace正是来处理这样的问题. 权限控制修饰词public/private/internal/protected往往是与package和class紧密结合的. namespace横跨package/class, 提供了更精确的scope控制方式.
怎么使用?
首先定义一个namespace (File: com/javaplusflex/ns/javaplusflex.as)
- package com.javaplusflex.ns {
- public namespace javaplusflex = http://javaplusflex.com/ns;
- }
定义一个函数属于这个namespace:
- package com.javaplusflex.account {
- import com.javaplusflex.ns.javaplusflex;// import namespace class
- public class User {
- javaplusflex function register():void { ... }
- }
- }
调用namespace中的函数
- package com.javaplusflex.web {
- import com.javaplusflex.account.User;
- import com.javaplusflex.ns.javaplusflex;// import namespace class
- public class User {
- public function onFormComplete():void {
- var user:User = new User();
- user.javaplusflex::register();
- ...
- }
- }
- }
通过use namespace简化一些
如果你在一个class大量使用某个namespace, 你可以使用use namespace把这个namespace打开(open), 从而省去在每个被调用元素前面写namespace的麻烦.
- import com.javaplusflex.account.User;
- import com.javaplusflex.ns.javaplusflex;// import namespace class
- use namespace javaplusflex;
- public class User {
- public function onFormComplete():void {
- var user:User = new User();
- user.register(); // automatically call: user.javaplusflex::register();
- ...
- }
- }
实现调用权限控制
在上面的例子, namespace只是强制函数的caller必须知道它在调用这个namespace中的函数, 只是起到一种警示作用. 对于绝大部分情况, 这已经足够了. 如果非得要实现调用权限控制, 这里是我写的一个例子:
- package com.javaplusflex.ns {
- public class NSTest {
- namespace secretNS = "http://jack";
- public function NSTest() {
- }
- secretNS function superAction():void {
- trace("test()");
- }
- public static function get NS(password:String):Namespace {
- if(password == "Jack") {
- return secretNS;
- }else{
- return null;
- }
- }
- }
- }
调用:
- package {
- public class Test {
- function test():void {
- var t:NSTest = new NSTest();
- var ns:Namespace = NSTest.NS;
- if(ns == null){
- trace("Access denied!");
- }else{
- t.ns::test();
- }
- }
- }
- }
========================================================
另一篇关于namespace的文章"When and how to use mx_internal in Flex"
http://xinsync.xju.edu.cn/index.php/archives/4872
- AS的名称空间/命名空间 On Actionscript's Namespaces
- 命名空间 Namespaces
- 命名空间 Namespaces
- namespaces命名空间(转载)
- gsoap namespaces命名空间定义
- ActionScript 3.0 命名空间
- 用示例学习C++的命名空间Namespaces
- 不具名的命名空间(unnamed namespaces)
- 不具名的命名空间(unnamed namespaces)
- XML与XML 命名空间(Namespaces)
- XML 命名空间(XML Namespaces)
- XML 命名空间(XML Namespaces)
- XML 命名空间(XML Namespaces)
- XML 命名空间(XML Namespaces)
- XML 命名空间(XML Namespaces)
- XML 命名空间(XML Namespaces)
- XML 命名空间(XML Namespaces)
- 17.XML 命名空间(XML Namespaces)
- 系统调用与库函数对于不同buffer size写文件效率对比
- 面试题 06162012 [1]
- 代码获取编码规则的最新编码
- 如何通过代码终止工作流实例
- Struts2 ValueStack & ActionContext & OGNL 关系
- AS的名称空间/命名空间 On Actionscript's Namespaces
- 二次开发单据在“特殊数据权限”的业务对象授权列表中不显示
- 一个相当详细的MINI2440按键驱动详解
- web-sorrow
- 序时簿显示分录字后,查询结果不准确
- mini2440触摸屏驱动详解
- 按精度输出浮点值
- 在虚拟机上跑vxworks的总结
- CentOS6更新源