"

千亿体育手机登录版

                                              "
                                              经典案例推广高端H5电商设计公司联系报价
                                              QQ联系
                                              微信联系
                                              手机联系
                                              QQ联系
                                              微信联系
                                              手机联系

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

                                              发布时间:2019-08-28
                                              发布者:eidea
                                              浏览次数:2290
                                              很多学习前端开发的小伙伴都会遇到这样的问题:在JavaScript中全局变量经城б谔逵只锹及?;嵋鹈逋?千亿体育手机登录版,甚至有时侯重写变量不是按照想象中的顺序来千亿体育手机登录版。避免全局变量名冲突的最好办法还是创建命名空间千亿体育手机登录版,接下来小编就给大家分享在JavaScript中创建命名空间的几种常用方法。

                                              JavaScript的执行环境由各种各样的全局变量构成千亿体育手机登录版,这些全局变量先于函数执行环境而创建、这些全局变量都挂载于“全局对象”下千亿体育手机登录版千亿体育手机登录版千亿体育手机登录版千亿体育手机登录版。当名称有冲突时就会产生一些不可控的问题千亿体育手机登录版,比如命名冲突千亿体育手机登录版千亿体育手机登录版、代码的脆弱性千亿体育手机登录版、难以测试等千亿体育手机登录版千亿体育手机登录版。



                                              在编程开发中合理的使用命名空间可以避免相同的变量或对象名称产生的冲突,而且命名空间也有助于组织代码有更强的可维护性和可读性千亿体育手机登录版千亿体育手机登录版。JavaScript中虽然没有提供原生的命名空间支持,但我们可以使用其他的方法(对象和闭包)实现类似的效果。

                                              1千亿体育手机登录版千亿体育手机登录版、单一全局变量

                                              JavaScript中一个流行的命名空间模式是选择一个全局变量作为主要的引用对象千亿体育手机登录版,因为每个可能的全局变量都成为唯一全局变量的属性千亿体育手机登录版,也就不用再创建多个全局变量,也就避免了和其他声明的冲突千亿体育手机登录版千亿体育手机登录版千亿体育手机登录版。不过单一全局变量模式已经在不少的JavaScript类库中使用千亿体育手机登录版千亿体育手机登录版,如:YUI定义了唯一的YUI全局对象千亿体育手机登录版千亿体育手机登录版千亿体育手机登录版,jQuery定义了$和jQuery,$由其他类库使用时使用jQuery等千亿体育手机登录版。示例如下:

                                              var myApplication = (function() {

                                              function() {

                                              // ***

                                              },

                                              return {

                                              // **

                                              }

                                              })();

                                              2千亿体育手机登录版、命名空间前缀

                                              命名空间前缀模式其思路非常清晰千亿体育手机登录版,就是选择一个独特的命名空间千亿体育手机登录版,然后在其后面声明声明变量千亿体育手机登录版、方法和对象千亿体育手机登录版。示例如下:

                                              var = myApplication_propertyA = {};

                                              var = myApplication_propertyA = {};

                                              function myApplication_myMethod() {

                                              // ***

                                              }

                                              从某种程度上来说千亿体育手机登录版,它确实减少了命名冲突的发生概率,但其并没有减少全局变量的数目千亿体育手机登录版,在使用这种模式时一定要特别注意千亿体育手机登录版千亿体育手机登录版千亿体育手机登录版。

                                              3、对象字面量表示法

                                              对象字面量模式可以认为是包含一组键值对的对象千亿体育手机登录版,每一对键和值由冒号分隔千亿体育手机登录版千亿体育手机登录版,键也可以是代码新的命名空间千亿体育手机登录版。示例如下:

                                              var myApplication = {

                                              // 可以很容易的为对象字面量定义功能

                                              getInfo:function() {

                                              // ***

                                              },

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

                                              models:{},

                                              views:{

                                              pages:{}

                                              },

                                              collections:{}

                                              };

                                              对象字面量为我们提供了优雅的键/值语法千亿体育手机登录版千亿体育手机登录版,我们可以非常便捷的组织代码封装不同的逻辑或功能千亿体育手机登录版千亿体育手机登录版千亿体育手机登录版,而且可读性千亿体育手机登录版、可维护性、可扩展性极强千亿体育手机登录版。

                                              4千亿体育手机登录版、嵌套命名空间

                                              嵌套命名空间模式可以说是对象字面量模式的升级版千亿体育手机登录版、它也是一种有效的避免冲突模式千亿体育手机登录版、因为即使一个命名空间存在千亿体育手机登录版千亿体育手机登录版、它也不太可能拥有同样的嵌套子对象千亿体育手机登录版、示例如下:

                                              var myApplication = myApplication || {};

                                              // 定义嵌套子对象

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

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

                                              当然千亿体育手机登录版、我们也可以选择声明新的嵌套命名空间或属性作为索引属性千亿体育手机登录版、如:

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

                                              使用嵌套命名空间模式可以使代码易读且有组织性千亿体育手机登录版,而且相对安全千亿体育手机登录版、不易产生冲突千亿体育手机登录版,其弱点是如果我们的命名空间嵌套过多会增加浏览器的查询工作量。

                                              5千亿体育手机登录版、立即调用的函数表达式

                                              立即调用函数(IIFE)实际上就是匿名函数,被定义后立即被调用千亿体育手机登录版。IIFE是用于封装应用程序逻辑的常用方法,以鼻б谔逵只锹及?千亿体育手机登录版;に馐苋置瓶占涞挠跋?。示例如下:

                                              // 命名空间和undefined作为参数传递千亿体育手机登录版千亿体育手机登录版千亿体育手机登录版,确保:

                                              // 1.命名空间可以在局部修改千亿体育手机登录版千亿体育手机登录版,不重写函数外部上下文

                                              // 2.undefined 的参数值是确保undefined千亿体育手机登录版,避免ES5规范里定义的undefined

                                              (function (namespace, undefined) {

                                              // 私有属性

                                              var foo = "foo";

                                              bar = "bar";

                                              // 公有方法和属性

                                              namespace.foobar = "foobar";

                                              namespace.sayHello = function () {

                                              say("Hello World!");

                                              };

                                              // 私有方法

                                              function say(str) {

                                              console.log("You said:" str);

                                              };

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

                                              可扩展性是任何可伸缩命名空间模式的关键,使用IIFE可以轻松实现这一目的千亿体育手机登录版,我们可以再次使用IIFE给命名空间添加更多的功能。

                                              6千亿体育手机登录版、命名空间注入

                                              命名空间注入是IIFE的另一个变体,从函数包装器内部为一个特定的命名空间“注入”方法和属性千亿体育手机登录版千亿体育手机登录版,使用this作为命名空间代理千亿体育手机登录版,这种模式的优点是可以将功能行为应用到多个对象或命名空间。示例如下:

                                              var myApplication = myApplication || {};

                                              myApplication.utils = {};

                                              (function () {

                                              var value = 5;

                                              this.getValue = function () {

                                              return value;

                                              }

                                              // 定义新的子命名空间

                                              this.tools = {};

                                              }).apply(myApplication.utils);

                                              (function () {

                                              this.diagnose = function () {

                                              return "diagnose";

                                              }

                                              }).apply(myApplication.utils.tools);

                                              // 同样的方式在普通的IIFE上扩展功能千亿体育手机登录版,仅仅将上下文作为参数传递并修改,而不是仅仅使用this千亿体育手机登录版千亿体育手机登录版,如果你经常被全局变量冲突困扰,一定要牢记JavaScript命名空间知识点千亿体育手机登录版千亿体育手机登录版千亿体育手机登录版千亿体育手机登录版。

                                              网站案例欣赏

                                              新大陆支付

                                              响应式企业官网

                                              泽云花样年

                                              FLASH项目官网

                                              逸林酒店

                                              响应式企业官网

                                              千亿体育手机登录版 网络小说排行榜 小说排行榜完结版 好看的言情小说 完美世界有声小说全集 欢乐颂小说结局是什么 小说阅读网站 遮天 辰东 小说 玄幻小说完本 管理书籍排行榜 小说阅读网 《完美世界》txt全集 绝色狂妃 仙魅 小说 小说阅读器 玄幻小说排行榜完本 盛世嫡妃 凤轻 小说 欢乐颂第一季免费阅读 灵域 天下 高月 小说 好看的历史书籍推荐 如何发布网络小说 盗墓笔记有声小说 君子以泽 梦入神机 辰东全部小说 好看的课外书 小说 《完美世界》txt全集 有声读物 有声小说打包下载 完美世界有声小说 《完美世界》txt全集 官场小说排行榜 有声小说下载 我欲封天 耳根 小说零 欢乐颂第一季免费阅读 怎么写网络小说 古风名字 盗墓笔记 欢乐颂小说txt 古风小说 君子以泽 辰东 梦入神机 风凌天下 灵域 琅琊榜 海宴 小说 我欲封天 耳根 小说 盗墓笔记小说txt下载 盗墓笔记txt全集下载 我欲封天txt下载 有声小说打包下载 我欲封天 耳根 小说 雪鹰领主 怎样写网络小说 好看的课外书 完美世界txt下载 好看的电视剧 盛世嫡妃 凤轻 小说 好看的小说 君子以泽 欢乐颂小说txt 完美世界小说下载