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