文章一:来源:http://www.neoease.com/javascript-namespace/
JavaScript 的命名空间并不是真正的命名空间, 只是在脚本内部创建一个封闭的小空间, 必须通过特定的空间名称才能对空间内部的代码进行访问, 这样可以防止同名函数和变量发生冲突, 也可以更方便地管理代码, 就像 .NET 的命名空间 (namespace) 和 Java 的包 (package) 一样.
为什么需要命名空间?
1. JavaScript 是不会禁止你重复定义函数和变量的, 但他只会使用最后定义的版本, 也就是说, 这将导致前面的失效, 令系统出错. 比如, $(id) 是最常用的, 也许你会毫不犹豫的在自己的脚本上定义这个函数, 但是当你用上 prototype, 你就会发现, 它和 prototype 的函数冲突, 并导致你的页面跑不动了. 怎么办? 这时候就需要命名空间了. 我发布的主题里面的 JavaScript 都有用命名空间包起来的, 我这么做就是为了防止和某些插件的代码发生冲突.
2. 如果你要为自己准备一套常用的函数, 或者自己搭建一个 framework, 那这个方法可以使你的代码维护起来更加方便.
怎么使用命名空间?
看以下代码, 命名空间里面定义了两个函数, 将空间命名为 myNamespace, 并声明了 $ 的对外接口. 也就是说, 我们可以在空间外部通过 myNamespace.$ 来调用 $ 函数, 但 myMethod 函数只能在空间内部使用. 因为外部调用需要通过空间来调用, 所以不会和外部函数发生冲突. 变量同理.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
(function{ // 通过 ID 获取 Element 对象 function $(id) { return document.getElementById(id); } // 显示对应 ID 的对象的节点类型名字 function myMethod(id) { alert($(id).nodeName); } // 这是对外的接口 window['myNamespace']= {} window['myNameSpace']['$'] = $; })(); |
这是一本很好的 JavaScript 工具书, 我一直没有时间将它全部看完, 即便如此, 我觉得前面几章就相当的精彩了, 所以还是热烈地向各位推荐, 尤其是程序员朋友.
我以前写的一个文章 "JavaScript 初始化装载方法" 其实也出自这本书, 文中我只是小改了一下而已.
这并不是一本入门级的书, 里面没有任何关于 JavaScript 的语法, 如果你完全没有接触过 JavaScript, 我不推荐你买它. 但如果你写过一点 JavaScript 代码, 并想了解更多关于 DOM(Document Object Model) 和浏览器行为的东西, 那我相信这将是你不二的选择.
文章二:来源:http://www.cnblogs.com/leafyoung/archive/2006/10/11/526570.html
注:好久没写了,今天把我在公司内网写的文章拷一份,出来露露脸,刚转Web开发,所以开始学JavaScript!
在 引入命名空间之前,一个令开发人员头疼的问题就是如何防止函数名/类名和其他人的冲突,在一个公司内部项目组之间可以通过命名预定(比如加前缀等)解决这 个问题,但是把视线放到整个软件开发领域,在当今协作开发相当盛行的时代,这个问题却依然存在。在使用多个第三方框架或类库的时候,你唯一能作的就是祈祷 它们的命名不要冲突,如果真正发生这种灾难的话,你唯一能作的就是放弃其中一个(注:可能是我孤陋寡闻,呵呵)。命名空间的引入相当程度上解决了这个问 题,当然,如果你使用的命名空间和其他公司不幸一样,而对方又是微软、SUN等大佬,那恭喜你,呵呵@_@!
从事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 = 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中模拟命名空间机制的完整实现,使用方式如下:
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();
相关推荐
然而,JavaScript并没有原生支持命名空间,但它可以通过模拟实现,常见的方法有对象字面量、立即执行函数表达式(IIFE)和模块化(如CommonJS、ES6模块)等。 1. 对象字面量:这是一种创建命名空间的简单方式,通过...
练习使用js自定义命名空间,使用了到了js的单体对象及js的闭包知识。通过一个网页程序进行演示说明
在探讨“大的法师地方js命名空间”这一主题时,我们主要关注的是JavaScript中命名空间的创建与使用。命名空间在编程领域中是一个重要的概念,它主要用于解决代码组织、避免全局变量污染以及模块化等问题。在...
然而,在某些场景下,例如与JavaScript或简单的数据解析应用集成时,我们可能希望去掉这些命名空间以简化处理。 要实现这个目标,我们可以自定义一个XML序列化器,继承自`System.Xml.Serialization.XmlSerializer`...
传统的JavaScript命名空间通常是通过创建一个全局对象,然后将所有相关的函数和变量作为该对象的属性来实现的。例如: ```javascript var MyNamespace = { func1: function() {}, func2: function() {}, var1: '...
类似于JavaScript的ES6模块,TypeScript的命名空间也支持`import`和`export`操作。我们可以将命名空间内的成员导出,然后在其他地方导入使用。如: ```typescript // 导出 export * from './otherModule'; // ...
JavaScript 命名空间是一种组织代码的策略,用于避免全局变量污染和冲突,尤其是在大型项目中,多个组件或模块共存时。JavaScript 本身并不直接支持命名空间的概念,但可以通过对象和闭包来模拟实现。以下是一些实现...
用源生的javascript实现一个命名空间的组件类,可以一次创建多个命名空间。
本篇文章将深入探讨如何在JavaScript中模拟jQuery的命名空间,以实现更有序、更安全的代码组织。 首先,我们需要理解JavaScript的命名空间是如何工作的。由于JavaScript本身没有内置的命名空间机制,我们通常通过...
EXT JS是一个用于构建富客户端Web应用程序的JavaScript库,它提供了一种模块化、面向对象的方式来组织代码,其中命名空间就是这个体系中的关键组成部分。 在EXT JS中,命名空间是通过类(Class)的层次结构来实现的...
JavaScript中的命名空间模式是一种组织和管理代码的方式,它旨在解决全局变量污染和命名冲突的问题。在JavaScript这种没有原生命名空间支持的语言中,通过创建一个全局对象并将所有功能附加到这个对象下面,可以模拟...
JavaScript中的命名空间(namespace)模式是一种组织代码结构的策略,特别是在使用多个库或框架时,避免全局变量冲突和提高代码可维护性。由于JavaScript没有像C#或Java那样的内置命名空间支持,开发者需要通过...
使用JavaScript就没有这么舒服了,Javascript只有函数作用域,什么块儿啊、神马文件啊统统都认为是一个命名空间的,有时候因为一些重名问题导致的错误让人莫名其妙,难以调试解决。 一个简单的例子 代码如下:<...
在XML中,命名空间(Namespaces)是解决元素名称冲突的关键机制,尤其在处理多个XML文档交互时。本实例主要涉及如何在XML文档中进行带有命名空间的操作,包括增、删、改、查等常见操作。 首先,理解XML命名空间的...
Javascript 本身没有命名空间的概念,需要用对象模拟出来。 比如定义一个命名空间的类,用于创建命名空间: function NameSpace(){ } 这是一个构造函数,但却不做任何事情,再来下面和评论有关的代码: var ...
### JavaScript 创建命名空间的五种方法 #### 一、通过函数创建命名空间 在JavaScript中,使用函数创建命名空间是一种常见的做法。这种方法主要是利用函数来封装命名空间内的成员,包括属性和方法。这种方式的优点...
在JavaScript中创建命名空间是为了避免全局变量污染以及更好地组织代码结构。命名空间可以将代码逻辑分隔成一个一个的模块,防止变量名或函数名发生冲突。在给定的文件信息中,提供了两种方法来实现创建命名空间的...
【C#命名空间详解】 命名空间在C#编程中扮演着至关重要的角色,它是一种组织代码的方式,使得大型项目中的类和方法可以有序且避免命名冲突。C#中的命名空间通常对应于.NET Framework中的库或者服务,它们包含了相关...
javascript中本没有命名空间的概念,但是要体现面向对象的思想, 应当有命名空间,就像java中的package,.net中的namespace一样, 作用主要为了防止类名冲突,相同的类名只要属于不同的命名空间,便不会冲突。...