namespace命名空间是一种代码组织结构,通过名称空间来区分类。

在当前ES标准中,并没有命名空间这个概念,但是在编写大型项目或者多个js库同时使用或者多人共同完成项目的时候,很难保证变量名不会出现重复的现象,所以模拟实现命名空间就是非常有必要的。

一.实现原理:

原理很简单,就是将js中的类(ES中并没有类这个概念,构造函数其实就是承担类的角色),作为另外一个对象的属性使用,也就是实现了命名空间的功效,先看一段简单的代码实例:
   [ 其他 ] 运行代码    下载代码
<script>
var nsA=new Object();
var nsB=new Object();
nsA.obj=new Object();
nsB.obj=new Object();
</script>
在以上代码中,nsA和nsB就可以看做简单的命名空间,在各自的命名空间下,使用具有相同名称的类也是不冲突的,当然这里是模拟实现的,再来看一段比较好的实现划分命名空间的代码实例:
   [ 其他 ] 运行代码    下载代码
<script>
Namespace = new Object();
Namespace.register = function(fullNS){
  // 将命名空间切成N部分, 比如Grandsoft、GEA等
  var nsArray = fullNS.split('.');
  var sEval = "";
  var sNS = "";
  for (var i = 0; i < nsArray.length; i++){
    if (i != 0) sNS += ".";
    sNS += nsArray[i];
    sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"
  }
  if (sEval != "") eval(sEval);
}
Namespace.register("Grandsoft.GEA");
</script>
以上代码看上去稍稍复杂一些,其实原理是一样的,使用示例:
   [ 其他 ] 运行代码    下载代码
<script>
// 注册命名空间Grandsoft.GEA, Grandsoft.GCM
Namespace.register("Grandsoft.GEA");
Namespace.register("Grandsoft.GCM");
// 在Grandsoft.GEA命名空间里面声明类Person
Grandsoft.GEA.Person = function(name, age){
  this.name = name;
  this.age = age;
}
// 给类Person添加一个公共方法show()
Grandsoft.GEA.Person.prototype.show = function(){
  console.log(this.name + " is " + this.age + " years old!");
}
// 演示如何使用类Person
var p = new Grandsoft.GEA.Person("yanglf", 25);
p.show();
</script>

代码描述:javascript命名空间。javascript命名空间简单介绍下载



106 141



用户评论
大牛,别默默的看了,快登录帮我点评一下吧!:)      登录 | 注册



×
×
51前端

注册

×
绑定手机

请绑定手机号,在继续操作

×
单次下载支付

应付金额:279

支付完成后,回到下载页面,在进行下载

官方QQ群
意见反馈
qq群

扫描上面二维码加微信群

官方QQ群

jQuery/js讨论群
群号:642649996
Css3+Html5讨论群
群号:322131262

加群请备注:从官网了解到