手机
当前位置:查字典教程网 >编程开发 >php教程 >JavaScript创建命名空间的5种写法
JavaScript创建命名空间的5种写法
摘要:在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子:复制代码代码如下:v...

在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子:

复制代码 代码如下:

var sayHello = function() {

return 'Hello var';

};

function sayHello(name) {

return 'Hello function';

};

sayHello();

最终的输出为

复制代码 代码如下:

> "Hello var"

为什么会这样,根据 StackOverFlow 的解释,实际上JavaScript的是按如下顺序解析的。

复制代码 代码如下:

function sayHello(name) {

return 'Hello function';

};

var sayHello = function() {

return 'Hello var';

};

sayHello();

不带var的function声明被提前解析了,因此现代的JS写法建议你始终使用前置var声明所有变量;

避免全局变量名冲突的最好办法还是创建命名空间,下面是在JS中合建命名空间的几种常用方法。

一、通过函数(function)创建

这是一种比较常见的写法,通过声明一个function实现,函数里设置初始变量,公共方法写入prototype,如:

复制代码 代码如下:

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形式可以写得紧凑些:

二、通过JSON对象创建Object

复制代码 代码如下:

/*

Object

*/

var NameSpace = NameSpace || {};

NameSpace.Hello = {

name: 'world'

, sayHello: function(_name) {

return 'Hello ' + (_name || this.name);

}

};

调用

复制代码 代码如下:

NameSpace.Hello.sayHello('JS');

> Hello JS;

这种写法比较紧凑,缺点是所有变量都必须声明为公有(public)的,导致所有对这些变量的引用都需要加this指示作用域,写法也略有冗余。

三、通过闭包(Closure)和Object实现

在闭包中声明好所有变量和方法,并通过一个JSON Object返回公有接口:

复制代码 代码如下:

var NameSpace = NameSpace || {};

NameSpace.Hello = (function() {

//待返回的公有对象

var self = {};

//私有变量或方法

var name = 'world';

//公有方法或变量

self.sayHello = function(_name) {

return 'Hello ' + (_name || name);

};

//返回的公有对象

return self;

}());

四、Object和闭包的改进型写法

上个例子在内部对公有方法的调用也需要添加self,如:self.sayHello(); 这里可以最后再返回所有公有接口(方法/变量)的JSON对象。

复制代码 代码如下:

var NameSpace = NameSpace || {};

NameSpace.Hello = (function() {

var name = 'world';

var sayHello = function(_name) {

return 'Hello ' + (_name || name);

};

return {

sayHello: sayHello

};

}());

五、Function的简洁写法

这是一种比较简洁的实现,结构紧凑,通过function实例,且调用时无需实例化(new),方案来自stackoverflow:

复制代码 代码如下:

var NameSpace = NameSpace || {};

NameSpace.Hello = new function() {

var self = this;

var name = 'world';

self.sayHello = function(_name) {

return 'Hello ' + (_name || name);

};

};

欢迎补充。

【JavaScript创建命名空间的5种写法】相关文章:

最好用的JavaScript开发工具和代码编辑器

php限制ip地址范围的方法

php curl 获取https请求的2种方法

php中smarty实现多模版网站的方法

JavaScript实现滚动栏效果的方法

php调整服务器时间的方法

php动态绑定变量的用法

php对象和数组相互转换的方法

phpmyadmin 数据库导入2048kb的解决办法

PHP与javascript对多项选择的处理

精品推荐
分类导航