JavaScript中实现命名空间 续

上次说到 JavaScript中的命名空间这个方法有点看不懂。事实上JavaScript中并不存在真正的类,这里的类实际上是用函数模拟实现的,而JavaScript中的函数实际上是一个对象,因此在JavaScript中:一个类就是一个对象

JavaScript中实现命名空间 续
// 声明一个全局对象Namespace,用来注册命名空间

JavaScript中实现命名空间 续
Namespace = new Object();

JavaScript中实现命名空间 续


JavaScript中实现命名空间 续
// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Grandsoft.GEA"

JavaScript中实现命名空间 续
Namespace.register = function(fullNS)

JavaScript中实现命名空间 续

JavaScript中实现命名空间 续

JavaScript中实现命名空间 续
{

JavaScript中实现命名空间 续
// 将命名空间切成N部分, 比如Grandsoft、GEA等

JavaScript中实现命名空间 续
var nsArray = fullNS.split('.');

JavaScript中实现命名空间 续
var sEval = "";

JavaScript中实现命名空间 续
var sNS = "";

JavaScript中实现命名空间 续
for (var i = 0; i < nsArray.length; i++)

JavaScript中实现命名空间 续

JavaScript中实现命名空间 续

JavaScript中实现命名空间 续
{

JavaScript中实现命名空间 续
if (i != 0) sNS += ".";

JavaScript中实现命名空间 续
sNS += nsArray;

JavaScript中实现命名空间 续
// 依次创建构造命名空间对象(假如不存在的话)的语句

JavaScript中实现命名空间 续
// 比如先创建Grandsoft,然后创建Grandsoft.GEA,依次下去
JavaScript中实现命名空间 续


JavaScript中实现命名空间 续
sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"

JavaScript中实现命名空间 续
}

JavaScript中实现命名空间 续
if (sEval != "") eval(sEval);

JavaScript中实现命名空间 续
}
JavaScript中实现命名空间 续

上面就是在JavaScript中模拟命名空间机制的完整实现,使用方式如下:

JavaScript中实现命名空间 续
// 注册命名空间Grandsoft.GEA, Grandsoft.GCM

JavaScript中实现命名空间 续
Namespace.register("Grandsoft.GEA");

JavaScript中实现命名空间 续
Namespace.register("Grandsoft.GCM");

JavaScript中实现命名空间 续


JavaScript中实现命名空间 续
// 在Grandsoft.GEA命名空间里面声明类Person

JavaScript中实现命名空间 续
Grandsoft.GEA.Person = function(name, age)

JavaScript中实现命名空间 续

JavaScript中实现命名空间 续

JavaScript中实现命名空间 续
{

JavaScript中实现命名空间 续
this.name = name;

JavaScript中实现命名空间 续
this.age = age;

JavaScript中实现命名空间 续
}

JavaScript中实现命名空间 续


JavaScript中实现命名空间 续
// 给类Person添加一个公共方法show()

JavaScript中实现命名空间 续
Grandsoft.GEA.Person.prototype.show = function()

JavaScript中实现命名空间 续

JavaScript中实现命名空间 续

JavaScript中实现命名空间 续
{

JavaScript中实现命名空间 续
alert(this.name + " is " + this.age + " years old!");

JavaScript中实现命名空间 续
}

JavaScript中实现命名空间 续


JavaScript中实现命名空间 续
// 演示如何使用类Person

JavaScript中实现命名空间 续
var p = new Grandsoft.GEA.Person("yanglf", 25);

JavaScript中实现命名空间 续
p.show();
JavaScript中实现命名空间 续

可以用两个js装载这两个方法,一个是公用的,可以命名为“nameSpace.js”,另一个可以随便,比如“test.js”。nameSpace.js之后可以不用动,只修改test.js 里面的东西,Grandsoft.GEA这个类需要替换成自己命名的类。 开始的时候也是有些模糊,多看就明白啦!
Tags: 

延伸阅读

最新评论

发表评论