Java学习

java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已经搬家了,新的地址是 http://www.javaly.cn 如果有对文章有任何疑问或者有任何不懂的地方,欢迎到www.javaly.cn (Java乐园)指出,我会尽力帮助解决。一起进步

 

Ext中namespace的作用

Ext中namespace的作用

Ext中在每一个页面中添加一个namespace呢,就像下面的代码:
// create namespace
Ext.namespace('myNameSpace');

// create application
myNameSpace.app = function() {
// do NOT access DOM from here; elements don't exist yet

// private variables

// private functions

// public space
return {
// public properties, e.g. strings to translate

// public methods
init: function() {
alert('Application successfully initialized');
}
};
}(); // end of app
作用呢就是用来封装一个global范围对象的属性和方法,以避免和其它的对象的属性和方法发生冲突,定义在return块中的方法和属性是公共的,外界可以直接访问,而其余的属性则不允许外界访问,通过这种方式,Ext较好的实现了在JavaScript中定义属性的public/private 问题。
以下是我又从网上查找的另一篇:
Ext2.0中,Ext类有个namespace方法,该方法的作用是把传入的参数转换成对象.使用该方法的目的主要在于可以区分类名相同的类,这有点和java中的package作用类似.让我们先看下源码:
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];
('if (typeof ' + rt + ' == "undefined"){' + rt + ' = {};} o = ' + rt + ';');

//初使化第一个根名对象(如:下文的system)
for (j=1; j<d.length; ++j) {
o[d[j]]=o[d[j]] || {};

//把system对象的corp属性做为一个对象赋值给自己 (相当于system=system.corp)
o=o[d[j]];

//把赋值完的带有corp属性的system对象再重新赋值给o (相当于o=system.corp)
}
}
}
从代码可以看出,如果我们传入的字符串参数是以"."分割的,那么将会创建多个对象,比如:
Ext.namespace('system.corp');
则会创建2个对象,相当于执行了下面的代码:
system = {};
system.corp = {};
这样,我们在自定义类的时候就能这样使用:
Ext.namespace('system.corp');

system.corp.ManageCorp = function() {
//dosomething
}
如果还想定义一个同名的类,那么可以就使用不同的namespace来区分,这样2个类就不会冲突了:
Ext.namespace('system.admin');

system.admin.ManageCorp = function() {
//dosomething
}

此外,注意源码中"eval"方法的使用,如果有需要可以采用这种方式来解决问题
文章出处:http://www.diybl.com/course/3_program/java/javashl/20081128/152786_2.html

posted on 2009-07-09 08:58 找个美女做老婆 阅读(465) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

公告

本blog已经搬到新家了, 新家:www.javaly.cn
 http://www.javaly.cn

常用链接

留言簿(6)

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜