源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JavaScript创建命名空间的5种写法

  • 时间:2022-05-31 17:13 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JavaScript创建命名空间的5种写法
在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子:
[u]复制代码[/u] 代码如下:
var sayHello = function() {   return 'Hello var'; }; function sayHello(name) {   return 'Hello function'; }; sayHello();
最终的输出为
[u]复制代码[/u] 代码如下:
> "Hello var"
为什么会这样,根据 StackOverFlow 的解释,实际上JavaScript的是按如下顺序解析的。
[u]复制代码[/u] 代码如下:
function sayHello(name) {   return 'Hello function'; }; var sayHello = function() {   return 'Hello var'; }; sayHello();
不带var的function声明被提前解析了,因此现代的JS写法建议你始终使用前置var声明所有变量; 避免全局变量名冲突的最好办法还是创建命名空间,下面是在JS中合建命名空间的几种常用方法。 [b]一、通过函数(function)创建[/b] 这是一种比较常见的写法,通过声明一个function实现,函数里设置初始变量,公共方法写入prototype,如:
[u]复制代码[/u] 代码如下:
var NameSpace = NameSpace || {}; /* Function */ NameSpace.Hello = function() {   this.name = 'world'; }; NameSpace.Hello.prototype.sayHello = function(_name) {   return 'Hello ' + (_name || this.name); }; var hello = new NameSpace.Hello(); hello.sayHello();
这种写法比较冗长,不利于压缩代码(jQuery使用fn代替prototype),而且调用前需要先实例化(new)。使用Object写成JSON形式可以写得紧凑些: [b]二、通过JSON对象创建Object [/b]
[u]复制代码[/u] 代码如下:
/* Object */ var NameSpace = NameSpace || {}; NameSpace.Hello = {     name: 'world'   , sayHello: function(_name) {     return 'Hello ' + (_name || this.name);   } };
调用
[u]复制代码[/u] 代码如下:
NameSpace.Hello.sayHello('JS'); > Hello JS;
这种写法比较紧凑,缺点是所有变量都必须声明为公有(public)的,导致所有对这些变量的引用都需要加this指示作用域,写法也略有冗余。 [b]三、通过闭包(Closure)和Object实现[/b] 在闭包中声明好所有变量和方法,并通过一个JSON Object返回公有接口:
[u]复制代码[/u] 代码如下:
var NameSpace = NameSpace || {}; NameSpace.Hello = (function() {   //待返回的公有对象   var self = {};   //私有变量或方法   var name = 'world';   //公有方法或变量   self.sayHello = function(_name) {     return 'Hello ' + (_name || name);   };   //返回的公有对象   return self; }());
[b]四、Object和闭包的改进型写法[/b] 上个例子在内部对公有方法的调用也需要添加self,如:self.sayHello(); 这里可以最后再返回所有公有接口(方法/变量)的JSON对象。
[u]复制代码[/u] 代码如下:
var NameSpace = NameSpace || {}; NameSpace.Hello = (function() {   var name = 'world';   var sayHello = function(_name) {     return 'Hello ' + (_name || name);   };   return {     sayHello: sayHello   }; }());
[b]五、Function的简洁写法[/b] 这是一种比较简洁的实现,结构紧凑,通过function实例,且调用时无需实例化(new),方案来自stackoverflow:
[u]复制代码[/u] 代码如下:
var NameSpace = NameSpace || {}; NameSpace.Hello = new function() {   var self = this;   var name = 'world';   self.sayHello = function(_name) {     return 'Hello ' + (_name || name);   }; };
欢迎补充。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部