javascript中的模块和名字空间
JavaScript中的模块和名字空间是不可区分的内容。
我们定义的每个单独的函数都是作为全局对象的一个属性。而JavaScript代码模块所必须遵循的最重要的规则就是:避免定义全局变量。因为,当定义一个全局变量时,都要被其他模块覆盖的危险,所以模块化编码要用如下方式:
var ModuleClass={};
ModuleClass.函数名1=function(){
函数体;//这个函数看起来是一个对象的方法。对,可以利用对象作为一个名字空间。
}
ModuleClass.函数名2=function(){
函数体;
}
使用对象作为一个名字空间,将所有的函数及变量都放在其中。这样,即使函数或变量重名(即不同对象中有相同的函数名),他们不在一个名字空间中,这样就不会有被覆盖的危险了。
JavaScript模块化的第一条规则:一个模块不应该为全局名字空间添加多于一条的标记。解释:上例中的var ModuleClass = {};其实是在全局名字空间(全局对象)的一个属性。通俗的讲:除了给全局命名空间定义一个模块的命名空间,其他的你一句代码都不要写。
将上面的代码放入一个*.js文件中,以便模块的复用,并且是文件名与名字空间名要一致。假设我们将上面的代码放入ModuleClass.js文件当中(这时,你的名字空间与文件名要一致)。现在又出现了一个新问题:
如果名字冲突怎么办?即两个人同时使用了同一个文件名。大家知道,同一目录下市不允许有相同的文件名的,所以可以把这两个文件放入不同的目录下面。如util/ModuleClass.js和tools/ModuleClass.js,这时我们文件中的空间就不能跟以前那样了,而是如下面所示:
util/ModuleClass.js
var util;
if(!util) util = {};//第一级域名
util.ModuleClass = {};//第二级域名
util.ModuleClass.函数名1=funciton(){
函数体;
}
util.ModuleClass.函数名2=function(){
函数体;
}
tools/ModuleClass.js代码:
var tools;
if(!tools)tools={};//一级域名
tools.ModuleClass={};//二级域名
tools.ModuleClass.函数名1=function(){
函数体;//这个函数看起来是一个对象的方法。对,可以利用对象作为一个名字空间
}
tools.ModuleClass.函数名2=function(){
函数体;
}
这样就不会出冲突了。当然,有人会问了,要是有人定义的文件夹名是一样的,那不照样冲突?首先,这样的几率不大,如果真的有我们可以采用java的命名方式。如下:
命名空间为:com.公司名.项目名.util.空间名;
实际路径为:com/公司名
相关文档:
javascript评估用户输入密码的强度
密码已经是我们生活工作中必不可少的工具,但一个不安全的密码有又有可能会给我们造成不必要的损失。作为网站设计者,如果我们在网页中能对用户输入的密码进行安全评估,并显示出相应的提示信息,那么对用户设置一个安全的密码将有很大帮助。同时也使得网站更具人性化,更有吸引力.
什么是一 ......
JavaScript不区分单个字符和字符串,任何字符或字符串可以用双引号或单引号引起来。如果字符串本身含有双引号,则应使用单引号将字符串括起来;如果字符串本身含有单引号,则应使用双引号将字符串引起来,两者可以嵌套使用。 ......
今天在学习Bom时遇到了一个错误:
Static overflow at 7
错误原因:自定义了一个 scrollTo(),与系统window.scrollTo()冲突,以致引起死循环,此错误在弹出错误框,而在FF下没有反应,但function也不执行。另外<img src="" onerror=""/>也可能出现这种情况。详细请参考:http://www.cnblogs.com/S.Sams/archive/200 ......
一、delete运算符删除对以前定义的对象属性或方法的引用:
var o=new Object();
o.name="hello";
alert(o.name); //输出“hello”
delete o.name;
alert(o.name); //输出& ......