注:好久没写了,今天把我在公司内网写的文章拷一份,出来露露脸,刚转Web开发,所以开始学javascript! 在引入命名空间之前,一个令开发人员头疼的问题就是如何防止函数名/类名和其他人的冲突,在一个公司内部项目组之间可以通过命名预定(比如加前缀等)解决这个问题,但是把视线放到整个软件开发领域,在当今协作开发相当盛行的时代,这个问题却依然存在。在使用多个第三方框架或类库的时候,你唯一能作的就是祈祷它们的命名不要...
最近看Ext源代码,看到了其实现命名空间函数的实现方法: Ext NameSpace实现代码: 代码如下: namespace : function(){ var a=arguments, o=null, i, j, d, rt; for (i=0; i d=a[i].split("."); rt = d[0]; eval(if (typeof + rt + == "undefined"){ + rt + = {};} o = + rt + ;); for (j=1; j<d.length; ++j) { ...
当在同一个网页里引入10多个js文件之后, 各js中的同名函数就很容易冲突了。 比如xxx库里写了个addCssStyle方法, yyy类库里也写了个addCssStyle方法, 而这两个方法的具体实现又有一定差别。 那么同时引用这两个组件的时候,函数冲突之后导致页面效果发生变化, 调试和修改都是非常痛苦的,如果为了避免冲突, 而放弃引用一些优秀的组件,那更是让人郁闷的事情。 为此,在封装javascript组件库的时候,请使用命名空间来避免冲突。...
在小项目中对于JavaScript使用,只要写几个function就行了。但在大型项目中,尤其是在开发追求良好的用户体验的网站中,如SNS,就会用到大量的JavaScrpt,有时JavaScript的工作量胜过了C#,这时写一堆function,就会显得很乱,杂乱无章,甚至会出现命名冲突,管理和维护起来都很麻烦。对于这种情况我们就需要使用面向对象的思想来开发JavaScript。那我们就这样作罢: 对于一个项目,首先要有个命名空间。所以我们首先要做的是定义一...
javascript中本没有命名空间的概念,但是要体现面向对象的思想, 应当有命名空间,就像java中的package,.net中的namespace一样, 作用主要为了防止类名冲突,相同的类名只要属于不同的命名空间,便不会冲突。 最简单创建命名空间的方法: 代码如下: var java = {}; java.util = {}; //这样就创建成功了命名空间:java.util //我们可以在java.util下面加类(函数),属性,或对象 java.util.HashMap = function() { this.Sho...
【关于模块化以及为什么要模块化】 先说说我们为什么要模块化吧。其实这还是和编码思想和代码管理的便利度相关(没有提及名字空间污染的问题是因为我相信已经考虑到模块化思想的编码者应该至少有了一套自己的命名法则,在中小型的站点中,名字空间污染的概率已经很小了,但也不代表不存在,后面会说这个问题)。 其实模块化思想还是和面向对象的思想如出一辙,只不过可能我们口中所谓的“模块”是比所谓的“对象”更大的对象而已。...
自执行函数:自动执行的函数。它在被解释时就已经在运行了。一般函数都是在被调用时才会执行的。 自执行函数的一般格式:(function() { 函数体 })(); 而且,自执行函数中一般都会有一个function() {}形式的匿名函数。 下面的代码在window对象中创建一个命名空间 mySpace,并把自执行函数中的方法封装在mySpace命名空间之下,以便于我们调用这个自执行函数中的一些功能。 代码如下: (function() { //根据id获取对象 function $(id)...
最简单创建命名空间的方法: 代码如下: 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中用{}花括...
在没有看到这篇 文章之前,我一直不知道原来bind也可以有命名空间。事实上,我看完这篇文章后,再去翻了一下手册,也才发现了一点点的注释。但手册也仅仅是一句话就带 过去了。没有过多的深究,或许他认为命名空间这玩意很简单,没有必要多解释? 先看手册,由于bind方法有三个参数(type,[data],fn),所以手册上这么介绍: .bind() 方法是用于往文档上附加行为的主要方式。所有JavaScript事件对象, 比如focus, mouseover, 和 resiz...
代码如下: $(function () { pageJs.urls = [ /, Index, ]; pageJs.run(); }); //the functions include html elements. Ajax function also can be put here. var Common = { init: function () { alert(Common); } }; //url--pages var Index = { init: function () { Common.init(); this.test(); this.test2(); alert(location.pathname); }, test: function () { alert(test); } }; Index.test2 = function () { Index.test();...
github:https://github.com/hirokidaichi/namespace-js 定义Namespace对象: var Namespace 现在来具体看一下Namespace对象的定义,它是一个NamespaceDefinition对象。该对象是一个函数对象(NamespaceDefinition对象的构造函数,如果不给参数的话就默认生成一个main的命名空间),还有三个属性,Object,Definition,Proc。其值依次为NamespaceObjectFactory,NamespaceDefinition,createProcedure函数对象类。 代码如下: 196 ...
使用过Java、C#的同学对命名空间非常的熟悉,在复杂的系统中会有N多的函数、对象,语言提供的、架构预定义的,这么多的函数和对象,由于编程规范要求起有实际意义的名字,难免会重名发生错误调用,而有了命名空间烦恼就没有了,不但可以分类组织函数与对象,还可以形成隔离,解决重名问题。 使用JavaScript就没有这么舒服了,Javascript只有函数作用域,什么块儿啊、神马文件啊统统都认为是一个命名空间的,有时候因为一些重名问题...
然而,在不同的文件中给一个命名空间添加属性的时候,首先要保证这个命名空间是已经存在的,同时不对已有的命名空间造成任何破坏。可以通过非破坏性的命名空间函数实现:代码如下:var KUI = KUI || {};KUI.utils = KUI.utils || {};KUI.utils.namespace = function(ns){ var parts = ns.split("."), object = KUI, i, len; if(parts[0] === "KUI"){ parts = parts.slice(1); } for(i = 0, len = ...
用 jQuery 绑定和解绑事件监听器都是非常简单的。但是当你为一个元素的一个事件绑定了多个监听器时,怎样精确地解绑其中一个监听器?我们需要了解一下事件的命名空间。 看下面这段代码: 代码如下: $(#element) .on(click, doSomething) .on(click, doSomethingElse); 像上面这样绑定事件监听器,当元素被点击时,doSomething 和 doSomethingElse 这两个监听器都会被触发。这是使用 jQuery 的一个便利之处,可以随时给元素的同一...
Javascript原生并不支持命名空间,需要变通来实现。 在我们创建一个JavaScript库时,命名空间就显得举足轻重了,我们可以将组成这个JavaScript库的零散的JavaScript文件(*.js)封装在命名空间中,而无须定义全局的函数或类。比如在本章节多次出现的Person,我们就可以作为库的一部分封装到合适的命名空间中: Code 5-13: 代码如下:var com = {};com.anyjava = {};com.anyjava.Person = function(name) { //私有成员 var _na...