前端开发入门知识:JavaScript命名空间常用方法

热点专题 阅读(659)

广州前锋2011.8.20我想分享

JavaScript中的全局变量经常导致命名冲突,有时甚至重写变量也不是想象的顺序。避免全局变量名冲突的最佳方法是创建命名空间。接下来,前锋广州网络培训教师将与您分享几种在JavaScript中创建命名空间的常用方法。

JavaScript执行环境包含各种全局变量,这些变量在函数执行环境之前创建并安装在“全局对象”下。当名称冲突时,存在一些无法控制的问题,例如命名冲突,代码漏洞和测试难度。

在编程开发中正确使用命名空间可以避免相同变量或对象名之间的冲突,命名空间还有助于组织代码更易于维护和读取。尽管JavaScript不提供本机命名空间支持,但我们可以使用其他方法(对象和闭包)来实现类似的效果。

1.单一全局变量

JavaScript中流行的命名空间模式是选择一个全局变量作为主要参考对象,因为每个可能的全局变量都成为唯一全局变量的属性,因此不需要创建多个全局变量,从而避免了其他的冲突声明。但是,在许多JavaScript库中使用了单个全局变量模式,例如:YUI定义了一个唯一的YUI全局对象,jQuery定义了$和jQuery,$在其他库使用时使用了jQuery。这是一个例子:

Var myApplication=(function {

功能{

//***

},

返回{

//**

}

});

2,名称空间前缀

名称空间前缀模式有一个非常清晰的概念,即选择一个唯一的名称空间,然后声明其后面的变量、方法和对象。举个例子:

var=myApplication_属性a=;

var=myApplication_属性a=;

函数myapplication\u mymethod{

//***

}

在某种程度上,它确实减少了命名冲突的可能性,但它并没有减少全局变量的数量,因此在使用此模式时要小心。

三。对象文本表示

对象文本模式可以被认为是包含一组键-值对的对象,每对键和值用冒号分隔,键也可以是代码的新命名空间。举个例子:

变量myapplication={

//很容易为对象文本定义功能

getinfo:函数{

//***

},<>

//可以进一步支持对象命名空间

型号:0X1778,

视图:{

第0X1778页

},

集合: {}

};

对象文字为我们提供了优雅的键/值语法。我们可以轻松地组织代码来封装不同的逻辑或函数,并且它具有可读性,可维护性和可扩展性。

4,嵌套命名空间

嵌套命名空间模式可以说是对象文字模式的升级版本。它也是避免冲突的有效方法,因为即使存在命名空间,也不太可能具有相同的嵌套子节点。一个例子如下:/p>

Var myApplication=myApplication || {};

//定义嵌套的子对象

myApplication.routers=myApplication.routers || {};

myApplication.routers.test=myApplication.routers.test || {};

当然,我们也可以选择将新的嵌套命名空间或属性声明为索引属性,例如:

myApplication ['routers']=myApplication ['routers'] || {};

使用嵌套的命名空间模式使代码可读和有组织,并且相对安全且不易发生冲突。缺点是,如果我们有太多嵌套的命名空间,它将增加浏览器的查询工作量。

5.立即调用函数表达式

立即调用函数(IIFE)实际上是一个匿名函数,在定义后立即调用。 IIFE是封装应用程序逻辑以保护其免受全局命名空间影响的常用方法。这是一个例子:

//命名空间和未定义作为参数传递,确保:

//1.命名空间可以在本地修改,而无需重写函数的外部上下文

//2.undefined的参数值是为了确保未定义,避免在ES5规范中定义的未定义

(function(namespace,undefined){

//私人财产

Var foo='foo';

标尺='酒吧';

//公共方法和属性

Namespace.foobar='foobar的';

namespace.sayHello=function {

说('Hello World!');

};

//私有方法

功能说(str){

Console.log('你说的是:'str);

};

})(window.namespace=window.namespace || {});

可伸缩性是任何可伸缩命名空间模式的关键,可以使用IIFE轻松完成,我们可以再次使用IIFE为命名空间添加更多功能。

6,命名空间注入

命名空间注入是IIFE的另一种变体,它将函数包装器中的方法和属性“注入”到特定的命名空间中,并将其用作命名空间代理。这种模式的优点是它可以将功能行为应用于多个Object或命名空间。这是一个例子:

Var myApplication=myApplication || {};

myApplication.utils={};

(函数{

Var值=5;

this.getValue=function {

返回值;

}

//定义一个新的子命名空间

This.tools={};

})应用(myApplication.utils);

(函数{

This.diagnose=function {

返回'诊断';

}

})应用(myApplication.utils.tools);

//在普通IIFE上扩展功能的方法相同,只需将上下文作为参数传递和修改,而不是仅仅使用它。如果您经常受到全局变量冲突的困扰,请务必牢记JavaScript命名空间知识点。

收集报告投诉

JavaScript中的全局变量经常导致命名冲突,有时甚至重写变量也不是想象的顺序。避免全局变量名冲突的最佳方法是创建命名空间。接下来,前锋广州网络培训教师将与您分享几种在JavaScript中创建命名空间的常用方法。

JavaScript执行环境包含各种全局变量,这些变量在函数执行环境之前创建并安装在“全局对象”下。当名称冲突时,存在一些无法控制的问题,例如命名冲突,代码漏洞和测试难度。

在编程开发中正确使用命名空间可以避免相同变量或对象名之间的冲突,命名空间还有助于组织代码更易于维护和读取。尽管JavaScript不提供本机命名空间支持,但我们可以使用其他方法(对象和闭包)来实现类似的效果。

1.单一全局变量

JavaScript中流行的命名空间模式是选择一个全局变量作为主要参考对象,因为每个可能的全局变量都成为唯一全局变量的属性,因此不需要创建多个全局变量,从而避免了其他的冲突声明。但是,在许多JavaScript库中使用了单个全局变量模式,例如:YUI定义了一个唯一的YUI全局对象,jQuery定义了$和jQuery,$在其他库使用时使用了jQuery。这是一个例子:

Var myApplication=(function {

功能{

//***

},

返回{

//**

}

});

2,名称空间前缀

命名空间前缀模式非常清楚地选择一个唯一的命名空间,然后声明其后面的变量,方法和对象。这是一个例子:

VAR=myApplication_propertyA={};

VAR=myApplication_propertyA={};

函数myApplication_myMethod {

//***

}

在某种程度上,它确实降低了命名冲突的可能性,但它并没有减少全局变量的数量,因此在使用此模式时要小心。

3.对象文字表示

对象文字模式可以被认为是包含一组键值对的对象,每对键和值由冒号分隔,并且键也可以是代码的新名称空间。这是一个例子:

Var myApplication={

//为对象文字定义功能很容易

getInfo:函数{

//***

},

//可以进一步支持对象命名空间

型号: {},

意见: {

页面: {}

},

集合: {}

};

对象文字为我们提供了优雅的键/值语法。我们可以轻松地组织代码来封装不同的逻辑或函数,并且它具有可读性,可维护性和可扩展性。

4,嵌套命名空间

嵌套命名空间模式可以说是对象文字模式的升级版本。它也是避免冲突的有效方法,因为即使存在命名空间,也不太可能具有相同的嵌套子节点。一个例子如下:/p>

Var myApplication=myApplication || {};

//定义嵌套的子对象

myApplication.routers=myApplication.routers || {};

myApplication.routers.test=myApplication.routers.test || {};

当然,我们也可以选择将新的嵌套命名空间或属性声明为索引属性,例如:

myApplication ['routers']=myApplication ['routers'] || {};

使用嵌套的命名空间模式使代码可读和有组织,并且相对安全且不易发生冲突。缺点是,如果我们有太多嵌套的命名空间,它将增加浏览器的查询工作量。

5.立即调用函数表达式

立即调用函数(IIFE)实际上是一个匿名函数,在定义后立即调用。 IIFE是封装应用程序逻辑以保护其免受全局命名空间影响的常用方法。这是一个例子:

//命名空间和未定义作为参数传递,确保:

//1.命名空间可以在本地修改,而无需重写函数的外部上下文

//2.undefined的参数值是为了确保未定义,避免在ES5规范中定义的未定义

(function(namespace,undefined){

//私人财产

Var foo='foo';

标尺='酒吧';

//公共方法和属性

Namespace.foobar='foobar的';

namespace.sayHello=function {

说('Hello World!');

};

//私有方法

功能说(str){

Console.log('你说的是:'str);

};

})(window.namespace=window.namespace || {});

可伸缩性是任何可伸缩命名空间模式的关键,可以使用IIFE轻松完成,我们可以再次使用IIFE为命名空间添加更多功能。

6,命名空间注入

命名空间注入是IIFE的另一种变体,它将函数包装器中的方法和属性“注入”到特定的命名空间中,并将其用作命名空间代理。这种模式的优点是它可以将功能行为应用于多个Object或命名空间。这是一个例子:

Var myApplication=myApplication || {};

myApplication.utils={};

(函数{

Var值=5;

this.getValue=function {

返回值;

}

//定义一个新的子命名空间

This.tools={};

})应用(myApplication.utils);

(函数{

This.diagnose=function {

返回'诊断';

}

})应用(myApplication.utils.tools);

//在普通IIFE上扩展功能的方法相同,只需将上下文作为参数传递和修改,而不是仅仅使用它。如果您经常受到全局变量冲突的困扰,请务必牢记JavaScript命名空间知识点。