// 配置 var config = {}; // 前台 config.front = {}; // 后台 config.admin = {}; // 后台数据 config.admin.data = {}; // 后台模块 config.admin.module = {}; // 后台颜色模块 config.admin.module.color = {}; // 后台图片模块 config.admin.module.images = {}; // 后台搜索模块 config.admin.module.search = {}; // 给后台颜色模块加背景颜色改变功能 config.admin.module.color.changeBgColor = function(color) { document.body.style.background = color; }; // 可以这么调用 config.admin.module.color.changeBgColor('#F30');我们看看这段object在内存中的结构
但是,以上声明命名空间的方式看起来不直观,我们来一个比较直观的结构化命名方式:
// 配置 var config = { // 前台 front : {}, // 后台 admin : { // 数据层 data : {}, // 模块层 module : { // 颜色模块 color : { // 背景颜色改变功能 changeBgColor : function(color){ document.body.style.background = color; }, // 前景颜色改变功能 changeFnColor : function(color){ document.body.style.color = color; } }, // 图片模块 images : { }, // 搜索模块 search : { } } } }; // 可以这么调用 config.admin.module.color.changeBgColor('#F30');
以上的声明方式就把结构化很好的呈现出来了,利用命名空间非常方便的管理维护拓展程序,当多人开发或者JavaScript代码写的数量巨大时不用担心命名冲突的问题。我们也可以写一个命名空间的功能,省去以上复杂的声明方式。比如以上例子实际上我只是暂时用到config.admin.module.color.changeBgColor这个功能,那么我就需要先定义config,接着admin,然后module,最后是color.changeBgColor,比较繁琐,于是我们可以写一个命名空间注册的功能,直接注册就能用
// 命名空间注册函数 var namespace = { reg : function(s){ var arr = s.split('.'); var namespace = window; for(var i=0,k=arr.length;i<k;i++){ if(typeof namespace[arr[i]] == 'undefined'){ namespace[arr[i]] = {}; } namespace = namespace[arr[i]]; } }, del : function(s){ var arr = s.split('.'); var namespace = window; for(var i=0,k=arr.length;i<k;i++){ if(typeof namespace[arr[i]] == 'undefined'){ return; }else if( k == i+1 ){ delete namespace[arr[i]]; return; }else{ namespace = namespace[arr[i]]; } } } };
可以这样注册命名空间
// 先注册命名空间 namespace.reg('config.admin.module.color'); // 添加功能 config.admin.module.color.changeBgColor = function(color){ document.body.style.background = color; }; // 调用功能 config.admin.module.color.changeBgColor('#F30'); // 删除命名空间 namespace.del('config.admin.module.color');
相关推荐
练习使用js自定义命名空间,使用了到了js的单体对象及js的闭包知识。通过一个网页程序进行演示说明
然而,JavaScript并没有原生支持命名空间,但它可以通过模拟实现,常见的方法有对象字面量、立即执行函数表达式(IIFE)和模块化(如CommonJS、ES6模块)等。 1. 对象字面量:这是一种创建命名空间的简单方式,通过...
然而,在某些场景下,例如与JavaScript或简单的数据解析应用集成时,我们可能希望去掉这些命名空间以简化处理。 要实现这个目标,我们可以自定义一个XML序列化器,继承自`System.Xml.Serialization.XmlSerializer`...
在探讨“大的法师地方js命名空间”这一主题时,我们主要关注的是JavaScript中命名空间的创建与使用。命名空间在编程领域中是一个重要的概念,它主要用于解决代码组织、避免全局变量污染以及模块化等问题。在...
JavaScript中的命名空间(namespace)模式是一种组织代码结构的策略,特别是在使用多个库或框架时,避免全局变量冲突和提高代码可维护性。由于JavaScript没有像C#或Java那样的内置命名空间支持,开发者需要通过...
5. 模块化命名:在大型项目中,使用模块化命名空间,如myApp.utils.functions(),减少全局变量污染。 6. 注释清晰:良好的注释有助于理解代码逻辑,每个函数、类或复杂的代码块前都应有注释。 以上规范旨在提升代码...
### JavaScript 创建命名空间的五种方法 #### 一、通过函数创建命名空间 在JavaScript中,使用函数创建命名空间是一种常见的做法。这种方法主要是利用函数来封装命名空间内的成员,包括属性和方法。这种方式的优点...
以下是五种创建JavaScript命名空间的方法: 1. **通过函数(function)创建** 这种方法通常涉及定义一个函数,然后在函数内部声明变量和方法。例如: ```javascript var namespace = namespace || {}; namespace....
类似于JavaScript的ES6模块,TypeScript的命名空间也支持`import`和`export`操作。我们可以将命名空间内的成员导出,然后在其他地方导入使用。如: ```typescript // 导出 export * from './otherModule'; // ...
JavaScript 命名空间是一种组织代码的策略,用于避免全局变量污染和冲突,尤其是在大型项目中,多个组件或模块共存时。JavaScript 本身并不直接支持命名空间的概念,但可以通过对象和闭包来模拟实现。以下是一些实现...
传统的JavaScript命名空间通常是通过创建一个全局对象,然后将所有相关的函数和变量作为该对象的属性来实现的。例如: ```javascript var MyNamespace = { func1: function() {}, func2: function() {}, var1: '...
本篇文章将深入探讨如何在JavaScript中模拟jQuery的命名空间,以实现更有序、更安全的代码组织。 首先,我们需要理解JavaScript的命名空间是如何工作的。由于JavaScript本身没有内置的命名空间机制,我们通常通过...
用源生的javascript实现一个命名空间的组件类,可以一次创建多个命名空间。
EXT JS是一个用于构建富客户端Web应用程序的JavaScript库,它提供了一种模块化、面向对象的方式来组织代码,其中命名空间就是这个体系中的关键组成部分。 在EXT JS中,命名空间是通过类(Class)的层次结构来实现的...
在XML中,命名空间(Namespaces)是解决元素名称冲突的关键机制,尤其在处理多个XML文档交互时。本实例主要涉及如何在XML文档中进行带有命名空间的操作,包括增、删、改、查等常见操作。 首先,理解XML命名空间的...
10. **模块化**:虽然在ES6之前,JavaScript没有内置的模块系统,但开发者可能使用了某种形式的命名空间或闭包来组织代码,实现类似模块的功能。 通过研究"JS_Library_20100826",开发者不仅可以学习到早期...
在JavaScript中创建命名空间是为了避免全局变量污染以及更好地组织代码结构。命名空间可以将代码逻辑分隔成一个一个的模块,防止变量名或函数名发生冲突。在给定的文件信息中,提供了两种方法来实现创建命名空间的...
JavaScript中的命名空间是一种组织代码的方式,它可以帮助避免全局变量的冲突,提高代码的可维护性和模块化。在JavaScript中,由于其特殊的变量提升(hoisting)机制,全局变量容易引发问题,尤其是当多个库或模块...
javascript中本没有命名空间的概念,但是要体现面向对象的思想, 应当有命名空间,就像java中的package,.net中的namespace一样, 作用主要为了防止类名冲突,相同的类名只要属于不同的命名空间,便不会冲突。...