《Ext详解与实践 v3》阅读补充资料:分配命名空间

本文探讨了现代Web前端开发中命名空间的重要性和管理方法,通过使用Ext.js库为例,介绍了如何通过命名空间避免JavaScript代码冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现代Web 前端的特征之一是由不止一个库所组成的,或者没有达到称为“库”的标准,有可能就是仅仅若干个小部件(Widget) 、某一段的JavaScript 代码(Snippets) 所组成。从开发者的角度而言,你所产生的代码有很大的机会与其他的代码产生冲突,因为我们清楚JavaScript 是一门格外自由的语言,允许全局变量星罗棋布地存在,这样的话太多就极容易造成污染。所以有必要采用一定措施降低这种冲突发生的可能性。

混合的脚本文件

extjs.com 的官方论坛它当前采用了来自三方面的程序(如 ):

  • Ext 精减版(ext.js)
  • Google 流量分析(urchin.js)
  • 论坛自带的vRulletin 脚本(vbulletin_*.js)

如果有新需求,还可能加入其他第三方的JavaScript 库。进入Firebug Dom 选项卡观察,位于window 对象下面存放的变量数以百计,这些变量正是Ajax 库所带来到JavaScript 顶层全局环境的。JavaScript 是一门带有变量作用域的语言,任何一个变量若不加var 则可表示为一个全局成员,就加入在window 对象(即全局空间)下。

Ext 库并没有使用太多的全局变量在里面。任何一个它的类均安排在“Ext 对象底下,所以说整个框架只使用了一个全局变量Ext (如 图)。

 

  Firebug 跟踪JavaScript 全局空间

命名空间(Namespace) 表示标识符(Identifier) 的上下文(Context) 。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。把实现的代码安排在一个特定的命名空间中,由各个类或单例构成,这样的JavaScript 编码风格不仅有良好的组织,直观可维护的优点,而且还能有避免它方代码干扰、窜改的好处。“为变量创建其命名空间,这样类就有了“安身之所”,不是飘荡四处的“全局变量。”(摘自API 文档)”。

提示: 笔者有一次就 Ext API 翻译的问题与参与人员发生小误会,有两份文件都是 DataField.js ,分别在不同的包中,一个是 /widget/DataField.js ;另外一个是 /widget/form/DataField.js 。但笔者误认为“未翻译的”当作“已翻译的”,这样大家碰头时就发生误会了。看来还真是命名空间相冲突而导致的结果,最后大家认真沟通下才把问题解释清楚。

使用Ext.ns() 可以实现简单的命名空间声明方式,其全称是Ext.namespace() Ext.ns() 用法如 所示:

Ext.namespace() 传入的参数中不能包含 ECMAScript 关键字,例如“ com.extjs.long 中的 long 是关键字,不能被 ns 方法执行。

Ext.namespace() 方法的关键地方之一是利用了eval 函数解析字符串为对象,若在一些不支持eval() 函数环境(如Adobe AIR 的安全沙箱下),可参考YUI 库的namespace() 方法,主要原理是JavaScript 的对象“索引式”声明增加Hash 表内元素,缺点是有第一个因子项的限制,因为该方法中须明确命名空间的第一个因子项。

此处披露的内容是《Ext详解与实践》 的补充内容,完整的资料敬请参阅《Ext详解与实践》 一书(覆盖包含2.2/3.03的版本)的全面介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sp42a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值