Ext源码分析:解析Ext的命名空间,Ext.namespace

初学者一定对Ext大量的命名空间感到不解,其实是非常简单的东西,看完这篇文章就明白了。

比如就用Ext.panel,Ext.layout.BorderLayout这2个命名空间来说吧,Ext是这样创建的:

Ext = {};
Ext.panel = {};
Ext.layout = {};
Ext.layout.BorderLayout = {};

说穿了是啥?对象里面套对象而已,很简单吧?我们来看看namespace的方法

1.namespace : function(){
2.            var a=arguments, o=null, i, j, d, rt;
3.            for (i=0; i<a.length; ++i) {
4.                d=a[i].split(".");
5.                rt = d[0];
6.                eval(‘if (typeof ‘ + rt + ‘ == "undefined"){‘ + rt + ‘ = {};} o = ‘ + rt + ‘;‘);
7.                for (j=1; j<d.length; ++j) {
8.                    o[d[j]]=o[d[j]] || {};
9.                    o=o[d[j]];
10.                }
11.            }
12.        },
13.        ……
14.        ……
15.        Ext.ns = Ext.namespace;
16.        ……
17.        ……
18.        Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data", "Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout", "Ext.app", "Ext.ux");
首先通过arguments得到namespace方法的参数,然后用点号分割成数组,依次把空对象递归赋值进去,上面就是系统内建的命名空间

你可能感兴趣的:(ext,J#)