初学者一定对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.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方法的参数,然后用点号分割成数组,依次把空对象递归赋值进去,上面就是系统内建的命名空间