转载自重庆PHP:
http://www.php-chongqing.com/index.php/article/31
写过Java的同学,对命名空间一定不会陌生,通过命名空间可以很好的解决类名、函数名、变量名冲突。
Javascript本身并不支持命名空间,不过我们可以模拟实现。Javascript里实现命名空间的方式有好几种,这里写下我最喜欢、最常用的方式。顺利说一下,我们的社区也是采用这种方式,截点社区的js代码:
/**
* php-chongqing.com global javascript
*
* Depend jquery.1.4.2, jquery-ui-1.8.15.custom.js, jquery.metadata.js, jquery.validate.js, prettify.js
* @author bing.peng
*/
var cq = {
version: '0.1',
/** 导航选中效果 */
nav: function() {
var url = location.toString();
$("#nav a[href='"+ url +"']").addClass("selected");
$("#meun-box a[href='"+ url +"']").addClass("selected");
}
};
/**
* 用户对象
* 检测用户登陆状态、弹出登陆框及完成登陆
*/
cq.User = function(){};
cq.User.prototype = {
initLogin: function() {
// do something...
},
isLogin: function() {
// do some thing...
}
}
/**
* 附件对象,文章/问题附件
* 完成我的社区页面中附件的上传、更新、删除等
*/
cq.Annex = function(){ // do something }
cq.Annex.prototype = {
uploaded: function() {
// do something
}
}
首先,我们用简单对象方式创建对象cq,在cq对象里定义了版本属性和nav导航选中方法,因为导航方法很常用,基本每个网页都会用,所以我直接定义到了cq对象里,假如要调用nav方法,就直接写:
cq.nav();
接着我们在cq对象下,利用原型定义的方式定义了User对象,注意我们是在cq对象下定义的User对象,也就是说我们把cq模拟成了我们的命名空间,调用User对象代码:
var user = new cq.User();
user.initLogin();
var annex = new cq.Annex();
annex.uploaded();
是不是很像Java的命名空间?利用这种简单/原型混合的方式,我们轻松的模拟出了类java的命名空间。在用Javascript构建大型应用时,命名空间是必不可少的,因为变量名、函数名、类名太难取了,^_^,这种写法还有助于提高代码的可读性... 有时间我们再讨论其它方式的命名空间。
分享到:
相关推荐
JavaScript 命名空间是一种组织代码的策略,用于避免全局变量污染和冲突,尤其是在大型项目中,多个组件或模块共存时。JavaScript 本身并不直接支持命名空间的概念,但可以通过对象和闭包来模拟实现。以下是一些实现...
模块更符合现代JavaScript的模块化标准,而命名空间在处理大型的、需要强类型控制的遗留代码时更有优势。开发者可以根据项目需求选择合适的组织方式。 5. **命名空间的块化** "命名空间块化"可能指的是将大型命名...
### JavaScript自执行函数之伪命名空间封装法 #### 一、引言 在现代Web开发中,JavaScript作为一种广泛使用的客户端脚本语言,其作用日益显著。为了提高代码的可维护性和安全性,开发者们不断探索新的编码技巧。...
在JavaScript中创建命名空间是为了避免全局变量污染以及更好地组织代码...在现代JavaScript开发中,许多库和框架提供更安全和规范的方式来实现类似的功能,例如使用立即执行函数表达式(IIFE)、模块化编程等高级特性。
值得注意的是,随着ECMAScript标准的发展,现代JavaScript已经支持了模块化编程,可以使用import和export关键字来组织代码。这为JavaScript提供了真正的模块化支持,而不仅仅是命名空间模拟。 在学习和开发...
JavaScript是Web开发中不可或缺的一部分,尤其在前端领域更是...在实际开发中,结合现代的模块化方案,如ES6模块,可以进一步优化命名空间的使用,而闭包则经常被用于实现私有变量和函数,增强代码的灵活性和安全性。
所以,在现代JavaScript开发实践中,通常会推荐使用更为安全的模块化技术,如ES6中的模块(module)导入导出(import/export)功能,来管理命名空间和代码的模块化。 总结来说,JavaScript中的命名空间可以有效地...
JavaScript是一种广泛使用的编程...尽管现代的JavaScript版本(ES6及以后)已经原生支持模块化和导入导出语句,但在更早期的JavaScript版本中,命名空间库如`namespace.js`在当时的JavaScript项目中扮演了重要的角色。
传统的JavaScript命名空间通常是通过创建一个全局对象,然后将所有相关的函数和变量作为该对象的属性来实现的。例如: ```javascript var MyNamespace = { func1: function() {}, func2: function() {}, var1: '...
JavaScript 命名空间模式是一种组织代码的方式,它在JavaScript这样的动态语言中模拟了类似类静态语言中的命名空间概念,以此来避免全局变量污染和命名冲突的问题。在JavaScript中,由于其全局作用域的特性,如果多...
### JavaScript的命名空间 **命名空间**的概念用于避免全局作用域中的变量冲突。在JavaScript中,可以通过对象字面量的方式定义命名空间,如下所示: ```javascript var namespace = namespace || {}; // 定义或...
1. **多引擎支持**:除了JScript,ClearScript还支持Google的V8引擎,提供了更快的执行速度和更现代的JavaScript语法支持。 2. **简单易用的API**:ClearScript为.NET开发者提供了直观的C#和VB.NET接口,可以轻松地...
总之,这段代码展示了如何在 JavaScript 中实现类的模拟、命名空间的创建以及如何组织代码以提高可读性和可维护性。虽然不是现代前端开发的最佳实践,但对于理解 JavaScript 的基本概念和代码组织策略仍然很有帮助。
#### 全局命名空间污染与 IIFE 在现代Web开发中,维护代码的清晰度和可维护性至关重要。全局命名空间污染是指在全局作用域(通常指的是`window`对象)中定义过多的变量、函数或其他类型的对象。这种做法会导致代码...
第5版作为该书的一个版本,主要聚焦于JavaScript语言本身,并在原有基础上加入了最新的ECMAScript标准内容,以适应现代JavaScript开发的需要。这本书不仅适用于初学者,也包含了对中高级开发者非常有帮助的深入内容...
7. **命名空间封装**:虽然JavaScript没有真正的命名空间,但可以模拟实现,比如使用对象来模拟命名空间,减少全局作用域中的变量数量,避免命名冲突。 8. **模块系统(CommonJS, ES6模块)**:在Node.js环境中,...