欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ExtJS Ext.namespace详解

程序员文章站 2022-07-12 11:56:07
...
Ext.namespace的作用是Creates namespaces to be used for scoping variables and classes so that they are not global。

具体的创建代码很简单,我开始不理解,因为没有看到任何return语句,创建的package不知道怎么可以被引用到。阅读源码解惑:


/*
 * 这段代码来自ExtJs。是Ext.namespace()的实现。
 * 里面的console语句是我自己实现的。  
 */
function ns(){
            var a=arguments, o=null, i, j, d, rt;
            for (i=0; i<a.length; ++i) {
                console.log("deal with "+a[i]);
                d=a[i].split(".");
                rt = d[0];
				/*
				 * 这句话是关键:理解成
				 * if(typeof abc == 'undefined'){
				 *    abc = {}; //abc对象就是这样定义。
				 * }
				 */ 
                eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
                console.log('RT is ' +rt);
                console.log("O is " + typeof(o) + "name " + o.name);
                for (j=1; j<d.length; ++j) {
                    console.log("Append attr " + d[j] + "as object");
                    o[d[j]]=o[d[j]] || {};
                    o=o[d[j]];
                }
            }
        }

//这句话其实会定义两个对象,分别是abc和kk。他们都的宿主都是window. abc有d,dd,ddd三个属性。而kk对象有a,b两个属性。
ns('abc','abc.d','abc.dd','abc.ddd','kk','kk.a','kk.b');
console.log("----------------");
console.dir(kk);
console.log("----------------")
console.dir(abc);
//验证一下他们的宿主
console.dir(window);



Firebug果然是个宝啊。。。

结果看下面的截图:

  • ExtJS Ext.namespace详解
            
    
    博客分类: js EXTJ#FirebugJavaScriptWindows
  • 大小: 119.6 KB