JavaScript创建命名空间的5种写法
在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: 代码如下: function sayHello(name) { return 'Hello function'; }; sayHello(); 代码如下: "Hello var"
为什么会这样,根据 StackOverFlow 的解释,实际上JavaScript的是按如下顺序解析的。
代码如下: var sayHello = function() { return 'Hello var'; }; sayHello(); 避免全局变量名冲突的最好办法还是创建命名空间,下面是在JS中合建命名空间的几种常用方法。 一、通过函数(function)创建这是一种比较常见的写法,通过声明一个function实现,函数里设置初始变量,公共方法写入prototype,如: 代码如下:
这种写法比较冗长,不利于压缩代码(jQuery使用fn代替prototype),而且调用前需要先实例化(new)。使用Object写成JSON形式可以写得紧凑些:
二、通过JSON对象创建Object 代码如下:
调用
代码如下: Hello JS;
这种写法比较紧凑,缺点是所有变量都必须声明为公有(public)的,导致所有对这些变量的引用都需要加this指示作用域,写法也略有冗余。 三、通过闭包(Closure)和Object实现在闭包中声明好所有变量和方法,并通过一个JSON Object返回公有接口: 代码如下: 四、Object和闭包的改进型写法上个例子在内部对公有方法的调用也需要添加self,如:self.sayHello(); 这里可以最后再返回所有公有接口(方法/变量)的JSON对象。 代码如下: 五、Function的简洁写法这是一种比较简洁的实现,结构紧凑,通过function实例,且调用时无需实例化(new),方案来自stackoverflow: 代码如下:
欢迎补充。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |