`
liss
  • 浏览: 824986 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

javascript面向对象之二 命名空间

阅读更多

javascript中本没有命名空间的概念,但是要体现面向对象的思想,应当有命名空间,就像java中的package,.net中的namespace一样,作用主要为了防止类名冲突,相同的类名只要属于不同的命名空间,便不会冲突。

 

最简单创建命名空间的方法:

var java = {};
java.util = {};
//这样就创建成功了命名空间:java.util 
//我们可以在java.util下面加类(函数),属性,或对象 
java.util.HashMap = function() {
	this.ShowMessage = function() {
		alert("java.util.HashMap");
	}
}
var map = new java.util.HashMap();
alert(map.ShowMessage()); //显示结果:java.util.HashMap 

 

封装创建命名空间的方法:

//定义一个对象,js中用{}花括号定义对象,等同于 var JsObject = new Object();
var JsObject = {};

//在JsObject对象下定义一个函数namespace
JsObject.namespace = function() {
	/*
	 * 下面代码中arguments为函数传入的参数, 在function未明确定义参数时,
	 * function也可以传入参数,并用arguments来接收, arguments类似数组,
	 * 如果传入多个参数,将按顺序保存,取值法:arguments[0],arguments[1]....
	 */
	var a = arguments;
	var o = null;
	var d;
	var rt;
	for ( var i = 0; i < a.length; i++) {
		d = a[i].split('.'); // 将传入的参数用符号'.' 进行分割,并放入d数组中。
		rt = d[0];
		// 判断数组中的第一个值是否未定义,如果未定义,便定义为空对象{},并赋值给变量o
		eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
		for ( var j = 1; j < d.length; j++) {
			/*
			 * 循环遍历数组d每个值作为key,加入到对象o中,如果key在o中存在,则取o中值,若 不存在,则赋值为空对象{}
			 */
			o[d[j]] = o[d[j]] || {};
			o = o[d[j]];
		}
	}
}

JsObject.namespace("org.myJs"); // 申明命名空间:org.myJs
//在命名空间org.myJs下定义类Student
org.myJs.Student = function() {
	// 定义类Student中的变量,并赋予初值,但此变量的访问权限是public
	this.studentNo = 's001';
	this.studentName = '小明';
	this.sex = '男';
}
var s = new org.myJs.Student(); // 创建Student类的对象
alert('学号:' + s.studentNo);
alert('姓名:' + s.studentName);
alert('性别:' + s.sex);

 

 

 

 

 

 

分享到:
评论
1 楼 hyl523 2013-05-03  
// 判断数组中的第一个值是否未定义,如果未定义,便定义为空对象{},并赋值给变量o 
        eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';'); 
        for ( var j = 1; j < d.length; j++) { 
            /*
             * 循环遍历数组d每个值作为key,加入到对象o中,如果key在o中存在,则取o中值,若 不存在,则赋值为空对象{}
             */ 
            o[d[j]] = o[d[j]] || {}; 
            o = o[d[j]]; 
        } 
下面这些看得不大明白啊。。。。

相关推荐

    Javascript 面向对象 命名空间

    javascript中本没有命名空间的概念,但是要体现面向对象的思想, 应当有命名空间,就像java中的package,.net中的namespace一样, 作用主要为了防止类名冲突,相同的类名只要属于不同的命名空间,便不会冲突。...

    JavaScript 面向对象之命名空间

    对于这种情况我们就需要使用面向对象的思想来开发JavaScript。那我们就这样作罢: 对于一个项目,首先要有个命名空间。所以我们首先要做的是定义一个函数来注册命名空间。代码如下: 代码如下: // 声明一个全局对象...

    javascript面向对象之Javascript 继承

    上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 、 JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看。在JavaScript...

    Javascript 面向对象之重载

    上几节讲了 JavaScript 面向对象之命名空间 、 javascript 面向对象的JavaScript类 与 JavaScript 面向对象的之私有成员和公开成员 ,大家可以先看上面的再继续往下看。假如 我这样定义: 代码如下: function ...

    javascript的基础语法,面向对象的实现和设计模式实现

    6.javascript 命名空间 Oject-Oriented 1.JavaScript Expressive 2. Interfaces 3.Introduction 4. Inheritance 5.AOP Jquery [jQuery][9] [jQuery架构设计与实现][10] [jQuery选择器库][11] [zepto][12] 1....

    JavaScript 面向对象的之私有成员和公开成员

    上两节讲了 JavaScript 面向对象之命名空间 与 javascript 面向对象的JavaScript类,大家可以先看上面的再继续往下看。其实很简单,废话少说,看了下面的代码及注释相信你就会一目了然! 代码如下: //声明类,就是一...

    面向对象javascript笔记

    大家好,根据我的学习经验总结了下面一些javascript面向对象方法的知识,希望对一些接触这方面不多的人有所帮助,有不正确的地方请指正。 学习内容;引用,函数重载和类型检查,作用域,图解prototype和constructor...

    javascript 面向对象的JavaScript类

    在上一节面 JavaScript 面向对象之命名空间 中说了怎么定义JavaScript命名空间,这一节来说下紧接着的一个概念——类。虽然JavaScript中没有class关键字,但作为开发人员我们一定要有这个思想。在C#中类可以分为...

    非常好的javascript原理资源,分享出来.zip

    6.javascript 命名空间 Oject-Oriented 1.JavaScript Expressive 2. Interfaces 3.Introduction 4. Inheritance 5.AOP Jquery [jQuery][9] [jQuery架构设计与实现][10] [jQuery选择器库][11] [zepto][12] 1....

    非常好的js项目资源,分享出来.zip

    6.javascript 命名空间 Oject-Oriented 1.JavaScript Expressive 2. Interfaces 3.Introduction 4. Inheritance 5.AOP Jquery [jQuery][9] [jQuery架构设计与实现][10] [jQuery选择器库][11] [zepto][12] 1....

    关于Javascript模块化和命名空间管理的问题说明

    其实这还是和编码思想和代码管理的便利度相关(没有提及名字空间污染的问题是因为我相信已经考虑到模块化思想的编码者应该至少有了一套自己的命名法则,在中小型的站点中,名字空间污染的概率已经很小了,但也不代表...

    JavaScript 面向对象的 私有成员和公开成员

    代码如下: //声明类,就是一个方法,其实在JavaScript中,命名空间、类、成员…. 一切皆对象 MyClass =function(){ var _this=this; //私有变量 var aa=”11″; //公开变量 this.bb=”22″; //私有方法 function ...

    JavaScript权威指南(第6版)(附源码)

    8.5 作为命名空间的函数 8.6 闭包 8.7 函数属性、方法和构造函数 8.8 函数式编程 第9章 类和模块 9.1 类和原型 9.2 类和构造函数 9.3 JavaScript中Java式的类继承 9.4 类的扩充 9.5 类和类型 9.6 JavaScript中的...

    JavaScript权威指南(第6版)

    8.5 作为命名空间的函数 8.6 闭包 8.7 函数属性、方法和构造函数 8.8 函数式编程 第9章 类和模块 9.1 类和原型 9.2 类和构造函数 9.3 JavaScript中Java式的类继承 9.4 类的扩充 9.5 类和类型 9.6 JavaScript中的面向...

    JavaScript权威指南(第6版)中文版pdf+源代码

     9.6 JavaScript中的面向对象技术217  9.7 子类230  9.8 ECMAScript 5 中的类239  9.9 模块248  第10章 正则表达式的模式匹配253  10.1 正则表达式的定义253  10.2 用于模式匹配的String方法261  10.3 ...

    JavaScript权威指南(第6版)(中文版)

    8.5 作为命名空间的函数 8.6 闭包 8.7 函数属性、方法和构造函数 8.8 函数式编程 第9章 类和模块 9.1 类和原型 9.2 类和构造函数 9.3 JavaScript中Java式的类继承 9.4 类的扩充 9.5 类和类型 9.6 JavaScript中的面向...

Global site tag (gtag.js) - Google Analytics