創(chuàng)建一個命名空間對象:如果你使用YUI,可以用YAHOO.namespace()方法: YAHOO.namespace("myProject");這分配了一個空的myProject對象,是YAHOO的一個成員(如 果myProject已存在的話,則不會被覆蓋)。現(xiàn)在我們可以開始添加YAHOO.myProject的成員。
對你的命名空間對象分配一個匿名函數(shù)返回值:
YAHOO.myProject.myModule = function () {
return {
myPublicProperty: "我作為YAHOO.myProject.myModule.myPublicProperty被訪問。";
myPublicMethod: function () {
YAHOO.log("我作為YAHOO.myProject.myModule.myPublicMethod被訪問。");
}
};
}(); // 這個括號導致匿名函數(shù)被執(zhí)行且返回
注意有閉合大括號和緊接著的括號()的最后一行—這種符號導致了匿名函數(shù)的立即執(zhí)行,返回包含myPublicProperty和myPublicMethod的對象。只要這個匿名函數(shù)一返回,返回對象就作為YAHOO.myProject.myModule被訪問。
在匿名函數(shù)中,在返回語句前加入“私有”方法和變量。到目前為止,我們只是將myPublicProperty和myPublicMethod直接分配到Y(jié)AHOO.myProject.myModule中。此外,當我們在返回語句之前放置一些代碼時,這個模式還支持被增加的效用。
YAHOO.myProject.myModule = function () {
//“私有”變量:
var myPrivateVar = “我僅能在YAHOO.myProject.myModule內(nèi)被訪問。”;
//私有方法:
var myPrivateMethod = function () {
YAHOO.log(”我僅能在YAHOO.myProject.myModule內(nèi)被訪問。”);
}
return {
myPublicProperty: “我作為YAHOO.myProject.myModule.myPublicProperty能被訪問。”
myPublicMethod: function () {
YAHOO.log(”我作為YAHOO.myProject.myModule.myPublicMethod能被訪問。”);
//在myProject,我能訪問私有的變量和方法
YAHOO.log(myPrivateVar);
YAHOO.log(myPrivateMethod());
//myPublicMethod的原生作用域是myProject,我們可以用“this”來訪問公共成員。
YAHOO.log(this.myPublicProperty);
}
};
}();在上面的代碼中,我們從一個匿名函數(shù)返回有兩個成員的一個對象。在YAHOO.myProject.myModule內(nèi)部,可以分別用this.myPublicProperty和this.myPublicMethod來訪問。在YAHOO.myProject.myModule外部,公共成員可以用YAHOO.myProject.myModule.myPublicProperty和YAHOO.myProject.myModule.myPublicMethod來訪問。
私有變量myPrivateProperty和myPrivateMethod只能被匿名函數(shù)本身或返回對象的成員訪問。盡管匿名函數(shù)會立即執(zhí)行和終止,但它們依然是保留著,憑借閉包(closure)的力量——通過一個函數(shù)的局部變量在這個函數(shù)返回后是保留的規(guī)則。只要 YAHOO.myProject.myModule需要它們,我們的兩個私有變量就不會被銷毀。
實踐這個模式。讓我們來看看這個模式的一個常見應用案例。假設你有一個列表,列表上的一些項可以被拖拽。應用拖拽的項上有拖拽的CSS類。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com