关于 Extjs 的 namespace

 命名空间(namespace)是Extjs组织代码的一个非常精巧的方式。通过这一方式,可以将数量庞大的js代码分类到不同的命名空间下,可以有效地解决js容易产生变量冲突的问题,让不同命名空间下的变量和对象的取名更自由而不受同名的约束。下面看看命名空间应用的例子:


 

Ext.namespace("App.common.util");    

 App.common.util.MyFormValidater = function(){   

               //your code here.    

 }    

App.common.util.DataGetter = function(){  

               //your code here.  

 }  

 

   


从上面例子可以看出,一个字符串("App.common.util"),经过Ext.namespace处理之后,便能像正常的js代码对象一样可以任意的添加属性(MyFormValidater 、DataGetter )。到底是什么动作可以产生这样的效果呢。看源代码(以下代码出自3.2版本):

   

 

view plaincopy to clipboardprint?

namespace : function(){  

            var o, d;  

            Ext.each(arguments, function(v) {  

                d = v.split(".");//以点分开字符串,得到字符串数组  

                o = window[d[0]] = window[d[0]] || {};//将第一个字符串数组第一个字符串作为window对象的一个属性  

  

                 /××依次地将字符串数组中的下一个字符串作为上一个字符串对应的对象(已经处理过)的属性*/  

                Ext.each(d.slice(1), function(v2){  

                    o = o[v2] = o[v2] || {};  

                });  

            });  

            return o;  

        }  


 


经过上面的处理之后,我们上面的例子代码实际上等效于:

window['App'] = {};

window['App'] ['common'] = {};

window['App'] ['common'] ['util']= {};

由于window是一个全局对象,所以:

App = {};

App.common = {};

App.common.util = {}

由上面的分析,命名空间其实就是window全局对象下面的各个对象树(还可以定义App.common.form等等)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值