javascript面向对象之二 命名空间

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


代码如下:

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 = function() //在JsObject对象下定义一个函数namespace
{
 /*下面代码中arguments为函数传入的参数,在function未明确定义参数时,
  function也可以传入参数,并用arguments来 接收,arguments类似数组,
  如果传入多个参数,将按顺序保存,取值法:arguments[0],arguments[1]....*/
var a = arguments,o = null,d,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 = function() //在命名空间org.myJs下定义类Student
{
    //定义类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);

效果和第一篇 (一)javascript经验总结面向对象—类 结果一样

(0)

相关推荐

  • 在JavaScript中实现命名空间

    注:好久没写了,今天把我在公司内网写的文章拷一份,出来露露脸,刚转Web开发,所以开始学javascript! 在引入命名空间之前,一个令开发人员头疼的问题就是如何防止函数名/类名和其他人的冲突,在一个公司内部项目组之间可以通过命名预定(比如加前缀等)解决这个问题,但是把视线放到整个软件开发领域,在当今协作开发相当盛行的时代,这个问题却依然存在.在使用多个第三方框架或类库的时候,你唯一能作的就是祈祷它们的命名不要冲突,如果真正发生这种灾难的话,你唯一能作的就是放弃其中一个(注:可能是我孤陋寡闻,

  • javascript 类和命名空间的模拟代码

    先上一段最简单的: 复制代码 代码如下: // 以下几行代码展示了命名空间.类.以及函数的模拟定义和使用: NameSpace = {}; NameSpace.Class = function(){ this.Method = function(info){alert(info);} }; new NameSpace.Class().Method("Hello world"); 再来一些可见到的,各种情况的代码 1.类的模拟 复制代码 代码如下: // 类定义 function Cla

  • JavaScript 编程引入命名空间的方法

    JavaScript 代码一般最常见的语法格式就是定义函数 function xxx(){/*code...*/},经常有这样的一大堆函数定义.函数名很容易发生冲突,特别是引入多个js文件时,冲突的情况尤为明显.因此也就有引入命名空间的必要. Javascript 本身没有命名空间的概念,需要用对象模拟出来. 比如定义一个命名空间的类,用于创建命名空间: function NameSpace(){ } 这是一个构造函数,但却不做任何事情,再来下面和评论有关的代码: var comment = n

  • javascript 命名空间以提高代码重用性

    当在同一个网页里引入10多个js文件之后, 各js中的同名函数就很容易冲突了. 比如xxx库里写了个addCssStyle方法, yyy类库里也写了个addCssStyle方法, 而这两个方法的具体实现又有一定差别. 那么同时引用这两个组件的时候,函数冲突之后导致页面效果发生变化, 调试和修改都是非常痛苦的,如果为了避免冲突, 而放弃引用一些优秀的组件,那更是让人郁闷的事情. 为此,在封装javascript组件库的时候,请使用命名空间来避免冲突. 将所有的方法和变量都要按包名类名的方式来写.

  • JavaScript 面向对象之命名空间

    在小项目中对于JavaScript使用,只要写几个function就行了.但在大型项目中,尤其是在开发追求良好的用户体验的网站中,如SNS,就会用到大量的JavaScrpt,有时JavaScript的工作量胜过了C#,这时写一堆function,就会显得很乱,杂乱无章,甚至会出现命名冲突,管理和维护起来都很麻烦.对于这种情况我们就需要使用面向对象的思想来开发JavaScript.那我们就这样作罢: 对于一个项目,首先要有个命名空间.所以我们首先要做的是定义一个函数来注册命名空间.代码如下: 复制

  • JavaScript创建命名空间(namespace)的最简实现

    最近看Ext源代码,看到了其实现命名空间函数的实现方法: Ext NameSpace实现代码:        复制代码 代码如下: namespace : function(){              var a=arguments, o=null, i, j, d, rt;              for (i=0; i<a.length; ++i) {                  d=a[i].split(".");                  rt = d

  • JavaScript 编程引入命名空间的方法与代码

    JavaScript 代码一般最常见的语法格式就是定义函数 function xxx(){/*code...*/},经常有这样的一大堆函数定义.函数名很容易发生冲突,特别是引入多个js文件时,冲突的情况尤为明显.因此也就有引入命名空间的必要. Javascript 本身没有命名空间的概念,需要用对象模拟出来. 比如定义一个命名空间的类,用于创建命名空间: function NameSpace(){ } 这是一个构造函数,但却不做任何事情,再来下面和评论有关的代码: var comment = n

  • javascript面向对象之二 命名空间

    最简单创建命名空间的方法: 复制代码 代码如下: 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();

  • Javascript 面向对象(二)封装代码

    写个小例子: 第一步:做一个"手机的类" 复制代码 代码如下: var MobilePhone = (function(){ ---- })() 第二步:考虑这个类,里需要那些类的私有属性,这里我想定义的是实例出来手机的数量 复制代码 代码如下: var MobilePhone = (function(){ //私有属性 var count = 0; //代表手机的数量 })() 第三步:创建一个构造函数,即实例时候,对产生的新象的一个初始化,例如属性,方法的初始化;在这个例子中,每一

  • JavaScript面向对象设计二 构造函数模式

    我们将使用构造函数模式将工厂模式进行改写. 复制代码 代码如下: function Employee(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { alert(this.name); }; } var Jim = new Employee("jim", 22, "SoftWare Engineer"); var Sun

  • Javascript 面向对象 命名空间

    javascript中本没有命名空间的概念,但是要体现面向对象的思想, 应当有命名空间,就像java中的package,.net中的namespace一样, 作用主要为了防止类名冲突,相同的类名只要属于不同的命名空间,便不会冲突. 最简单创建命名空间的方法: 复制代码 代码如下: var java = {}; java.util = {}; //这样就创建成功了命名空间:java.util //我们可以在java.util下面加类(函数),属性,或对象 java.util.HashMap = f

  • 《javascript设计模式》学习笔记二:Javascript面向对象程序设计继承用法分析

    本文实例讲述了Javascript面向对象程序设计继承用法.分享给大家供大家参考,具体如下: 1.关于继承: 百度百科对继承的解释是:继承是指一个对象直接使用另一对象的属性和方法. (话说百科对于计算机概念的继承的解释也太简略了) 继承的好处,优点学过面向对象的同学都知道,就不赘述了. javascript中的继承有三种(不同的书上对这三中的名称翻译都不一样,我按照我的理解来命名吧): a.构造函数继承(类式继承,组合继承,伪经典继承) b.原型继承 c.原型赋值(遍历)继承(寄生式继承) 2.

  • javascript 面向对象的JavaScript类

    在上一节面 JavaScript 面向对象之命名空间 中说了怎么定义JavaScript命名空间,这一节来说下紧接着的一个概念--类.虽然JavaScript中没有class关键字,但作为开发人员我们一定要有这个思想.在C#中类可以分为实例类和静态类,JavaScript亦然. 一,定义实例类: 在上节中我定义了一个cnblogs.news的命名空间,现在就在此命名空间下定义一个名为Article类: 复制代码 代码如下: cnblogs.news.Article=function(){ var

  • javascript面向对象之Javascript 继承

    上几节讲了 JavaScript 面向对象之命名空间 . javascript 面向对象的JavaScript类 . JavaScript 面向对象的之私有成员和公开成员 与 Javascript 面向对象之重载,大家可以先看上面的再继续往下看. 在JavaScript中实现继承可以有多种方法,下面说两种常见的. 一,call 继承,先看代码: 先定义一个"人"类 复制代码 代码如下: //人类 Person=function(){ this.name="草泥马";

  • Javascript 面向对象编程(一) 封装

    学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学习笔记,希望对大家学习这个部分有所帮助.我主要参考了以下两本书籍: <面向对象的Javascript>(Object-Oriented JavaScript) <Javascript高级程序设计(第二版)>(Professional JavaScript for Web Developers, 2nd

  • javascript 面向对象,实现namespace,class,继承,重载

    由于组里项目大多的javascript,css等客户端工作是另一同事在负责,该同事又特忙无法重构,老大也就只是提建议并未立即实施重构.但是我前些日子也改过些许客户端的小bug,确实那代码看得让人有些云里雾里,不知身在哪山,轻易不敢动代码,于是就自己动手鼓捣起我曾又爱又恨的javascript来,自己写一个简单的js实现namespace,继承,重载等面向对象的特性.欢迎拍砖灌水 .定义namespace Namesapce.js 复制代码 代码如下: Namespace = new Object

  • Javascript 面向对象之重载

    上几节讲了 JavaScript 面向对象之命名空间 . javascript 面向对象的JavaScript类 与 JavaScript 面向对象的之私有成员和公开成员 ,大家可以先看上面的再继续往下看. 假如 我这样定义: 复制代码 代码如下: function getDate(){.....} function getDate(date){.....} 那么后一个方法将覆盖前一个,虽然不报错. 但是我们确实是可以实现重载的,如果你用过jQuery,你就会深有体会,比如$("#btn&quo

随机推荐