初学者一定对Ext大量的命名空间感到不解,其实是非常简单的东西,看完这篇文章就明白了。
比如就用Ext.panel,Ext.layout.BorderLayout这2个命名空间来说吧,Ext是这样创建的:
Ext = {};
Ext.panel = {};
Ext.layout = {};
Ext.layout.BorderLayout = {};
说穿了是啥?对象里面套对象而已,很简单吧?我们来看看namespace的方法
- namespace : function(){
- var a=arguments, o=null, i, j, d, rt;
- for (i=0; i<a.length; ++i) {
- d=a[i].split(".");
- rt = d[0];
- eval('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');
- for (j=1; j<d.length; ++j) {
- o[d[j]]=o[d[j]] || {};
- o=o[d[j]];
- }
- }
- },
- ......
- ......
- Ext.ns = Ext.namespace;
- ......
- ......
- 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方法的参数,然后用点号分割成数组,依次把空对象递归赋值进去,上面就是系统内建的命名空间