A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小王 中级黑马   /  2014-2-8 14:28  /  1002 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小王 于 2014-2-8 17:43 编辑

如果在写代码的时候不知道这个代码在那个命名空间下,通过什么方法可以知道啊,麻烦写详细一点哈······

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
一:私有变量与封装变量
  平时我们学习写代码的时候所使用的命名空间基本就是以public、private、protected这三种为主,而在变量命名的技巧上则遵循驼峰命名法。但是碰到要封装的变量则会起一个和get/set差不多的变量名来表明他们之间的关系。比如一下代码
private var _x:Number;
public function get x():Number{
        return this._x;
}
public function set x(value:Number):void{
        this._x = value;
}
private var _y:Number;
public function get y():Number{
        return this._y;
}
public function set y(value:Number):void{
        this._y = value;
}
采用自定义命名空间的解决方案就是采用下面这种定义:
private namespace _;
_ var x:Number;
public function get x():Number{
        return _::x;
}
public function set x(value:Number):void{
        _::x = value;
}
_ var y:Number;
public function get y():Number{
        return _::y;
}
public function set y(value:Number):void{
        _::y = value;
}
其实就是把原来我们用来代表private变量的”_”定义成一个private的namespace。
二、事件函数区分与定义
  写AS3自然会非常频繁的和事件机制打交道,那么在习惯了使用private、public命名空间使用的时候,事件回调函数的定义我以前基本都是用private function。而命名方面基本就是loader的名字后面加事件,比如:
private var xmlLoader:URLLoader = new URLLoader;
xmlLoader.addEventListener(Event.COMPLETE,xmlLoader_complete);
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR,xmlLoader_ioError);

private function xmlLoader_complete(e:Event):void{
        //代码
}
private function xmlLoader_ioError (e:Event):void{
        //代码
}
那么一个类里类似代码一多大纲里就会出现非常混乱的局面,代码提示也会列出一大堆东西。
那么在运用自定义命名空间来写可以写成这样:
private namespace loader;
private namespace event;
private namespace ioErrorEvent;

loader var xml:URLLoader = new URLLoader;
loader::xml.addEventListener(Event.COMPLETE,event::xml_complete);
loader::xml.addEventListener(IOErrorEvent.IO_ERROR, ioErrorEvent::xml_ioError);

event function xmlLoader_complete(e:Event):void{
        //代码
}
ioErrorEvent function xml_ioError(e: IOErrorEvent):void{
        //代码
}
基本就是以类型来定义一个命名空间,这样就可以很方便的区分函数的作用。在代码折叠函数的时候很容易区分函数,从而达到快速人肉寻找的目的。

  到这里可能有人会问,要是每次用都要去声明自定义命名空间那多累啊,每个类里都要多写一堆命名空间声明多麻烦。其实,我们可以用AS3的include功能来解决这个问题,我们可以建一个文件比如NS.as,所有的命名空间声明都写在这个里面。然后放到类库的任意位置,那么要使用他只需要include “xx/xx/NS.as”;就可以使用所有其中的命名空间了。

三、减少代码提示的范围
  平时我们使用public、private、protected命名空间的时候只要一用代码提示就会把以上的三种命名空间下的变量全部毫无保留的全部显示出来,长长的一串,要是机器性能不够好那就有的好卡几下了。那么如果我们合理的定义好自定义命名空间的话就可以按类别来显示我们需要的变量和函数。比如以下是我个人使用的一些定义规范:

命名空间也可以分public和private以及protected。
public的命名空间直接以字母开头,private的命名空间则以“_”开头,protected命名空间则以$开头。 “_”命名空间表示private var,”$”命名空间表示private function。
那么在一起就是这样:
public namespace event;
private namespace _event;
protected namespace $event;
private namespace _;
private namespace $;
这样写代码也好看代码也好都有非常明确的指向性。而且在你输入命名空间的::的时候代码提示也只会给出这个命名空间下的变量以及函数,不会出现长长的那一串了。我个人使用下来发现在一些复杂的代码量比较大的项目中可以提升编写效率,因为类别分的比较清晰很少会因为找代码而头疼,在替换代码的时候由于有命名空间前缀也不容易替换错误。

评分

参与人数 1技术分 +3 收起 理由
电脑大牛 + 3 很给力!

查看全部评分

回复 使用道具 举报
我擦 ,发错地方了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马