从事Web开发不可避免要接触JavaScript,目前最新版本的JavaScript还是不支持命名空
间,所以命名冲突的问题凸显无疑,想象一下你引用了两个js文件,却发现由于命名问题导致你不得不放弃其中一个,从而导致多写了许多代码,无疑是十分令人
沮丧的。在JavaScript新版本引入命名空间概念之前,发扬自立更生精神和创造性是我们程序员的基本义务;-)
实现前提:与Delphi、C#等语言不同,JavaScript中的类并不是对象的定义,事实上JavaScript中并不存在真正的类,这里的
类实际上是用函数模拟实现的,而JavaScript中的函数实际上是一个对象,因此在JavaScript中:一个类就是一个对象。这和传统概念概念极
为不同,在JavaScript中,创建某个类的实例实际上就是将类(=对象,记住)复制了一份。看到这里,有点设计模式概念的应该就可以看出来了,在
JavaScript中,类机制使用了原型(prototype)模式。
实现原理:既然看清楚了类的本质,那么问题就简单了,如果将GEA项目组所有JS类和函数作为属性放在名为GEA的对象里面,然后将GEA对象以属
性的方式放在名为Grandsoft对象里面不就可以达到我们的目的,比如Grandsoft.GEA.Person实际上是在Grandsoft对象的
属性GEA(也是一个对象)中的类Person(还是一个对象)。
实现非常简单,整个命名空间机制的实现不超过20行代码,分析如下:
// 声明一个全局对象Namespace,用来注册命名空间
Namespace = new Object();
// 全局对象仅仅存在register函数,参数为名称空间全路径,如"Grandsoft.GEA"
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];
// 依次创建构造命名空间对象(假如不存在的话)的语句
// 比如先创建Grandsoft,然后创建Grandsoft.GEA,依次下去
sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"
}
if (sEval != "") eval(sEval);
}
上面就是在JavaScript中模拟命名空间机制的完整实现,使用方式如下:
// 注册命名空间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()
{
alert(this.name + " is " + this.age + " years old!");
}
// 演示如何使用类Person
var p = new Grandsoft.GEA.Person("yanglf", 25);
p.show();
哈哈,简单吧,这么简单的代码我就不多说了,大家自己看着玩吧,其实我有点懒,呵呵@_@!!!
http://www.cnblogs.com/leafyoung/archive/2006/10/11/526570.html
分享到:
相关推荐
以下是一些实现命名空间的常见方法: 1. **对象嵌套**: 在给定的示例中,`com.anyjava` 是一个命名空间,它通过对象嵌套的方式创建。`com` 是顶级命名空间,`anyjava` 是其下的子命名空间。通过这种方式,可以将...
`str.split('.')`将字符串分解成数组,然后遍历这些部分,如果某个部分尚未在当前命名空间中定义,就创建一个新的对象。这样,我们就可以方便地构建多层次的命名空间。 在`MYAPP`命名空间下,我们定义了`bfun`模块...
以下是一些关于如何在JavaScript中简单实现命名空间效果的知识点: 1. 命名空间定义:在JavaScript中,可以通过创建对象字面量的方式来定义命名空间。例如,可以创建一个全局对象,并在该对象下添加属性,这些属性...
然而,在某些场景下,例如与JavaScript或简单的数据解析应用集成时,我们可能希望去掉这些命名空间以简化处理。 要实现这个目标,我们可以自定义一个XML序列化器,继承自`System.Xml.Serialization.XmlSerializer`...
在JavaScript中创建命名空间是为了避免全局变量污染以及更好地组织代码结构。命名空间可以将代码逻辑分隔成一个一个的模块,防止变量名或函数名发生冲突。在给定的文件信息中,提供了两种方法来实现创建命名空间的...
#### 三、通过闭包和对象实现命名空间 闭包可以用来保护命名空间内的私有变量和方法,同时也可以通过返回的对象来暴露公共接口。 **示例代码**: ```javascript var namespace = namespace || {}; namespace....
JavaScript是Web开发中不可或缺的一部分,尤其在前端领域更是...在实际开发中,结合现代的模块化方案,如ES6模块,可以进一步优化命名空间的使用,而闭包则经常被用于实现私有变量和函数,增强代码的灵活性和安全性。
在 JavaScript 中,没有命名空间的概念,需要使用对象来模拟命名空间。下面是一个基本的命名空间实现方法: 1. 定义一个构造函数,用于创建命名空间: ``` function NameSpace(){} ``` 2. 创建一个命名空间对象: `...
在JavaScript这种没有原生命名空间支持的语言中,通过创建一个全局对象并将所有功能附加到这个对象下面,可以模拟实现类似命名空间的效果。这种方式通常用于大型项目或库,以保持代码的整洁和可维护性。 在描述中...
总之,命名空间在JavaScript开发中扮演着至关重要的角色,尤其是在处理大型项目或实现代码模块化时。通过合理地创建和使用命名空间,可以有效地管理代码结构,避免命名冲突,提高代码的可读性和可维护性。在实际应用...
本篇文章将深入探讨如何在JavaScript中模拟jQuery的命名空间,以实现更有序、更安全的代码组织。 首先,我们需要理解JavaScript的命名空间是如何工作的。由于JavaScript本身没有内置的命名空间机制,我们通常通过...
这种方法通过声明一个函数来实现命名空间,将变量和方法封装在函数内部。例如: ```javascript var NameSpace = NameSpace || {}; NameSpace.Hello = function() { this.name = 'world'; }; NameSpace.Hello....
在JavaScript中,并没有像其他编程语言那样提供原生的命名空间支持。因此,开发者通常会使用对象字面量的方式来模拟命名空间,即所谓的“伪命名空间”。这种方式可以有效地组织代码,减少全局变量的使用,使代码更加...
JavaScript中的命名空间是一...在JavaScript中选择合适的命名空间创建方式取决于项目需求,如是否需要私有成员、代码的简洁性以及性能考虑。使用命名空间有助于提高代码的组织性和可读性,减少全局变量带来的潜在问题。
标题中提到的“基于JavaScript下namespace功能的简单分析”,指的是在JavaScript中实现命名空间的概念和方法。命名空间在编程中用来组织代码,避免命名冲突和更方便地管理代码。当项目规模增大,或者需要将代码分割...
对于大型项目,使用命名空间来组织代码,可以将相关的函数和变量封装在各自的命名空间中,这样在代码维护和模块化开发时会更加清晰。 需要注意的是,虽然使用eval可以实现命名空间的动态创建,但在实际开发中应尽量...
本文将深入讲解如何在JavaScript(特别是jQuery库)中实现相同事件名称,但通过命名空间调用不同功能的方法。 首先,理解命名空间的概念。在JavaScript中,命名空间是一种组织代码的方式,可以防止变量或函数名冲突...