最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

javascript單例/單體模式(Singleton)_javascript技巧

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 20:58:46
文檔

javascript單例/單體模式(Singleton)_javascript技巧

javascript單例/單體模式(Singleton)_javascript技巧:單例模式的三個(gè)特點(diǎn): 1,該類(lèi)只有一個(gè)實(shí)例 2,該類(lèi)自行創(chuàng)建該實(shí)例(在該類(lèi)內(nèi)部創(chuàng)建自身的實(shí)例對(duì)象) 3,向整個(gè)系統(tǒng)公開(kāi)這個(gè)實(shí)例接口 Java中大概是這個(gè)樣子 代碼如下: class Singleton { //私有,靜態(tài)的類(lèi)自身實(shí)例 private static Singlet
推薦度:
導(dǎo)讀javascript單例/單體模式(Singleton)_javascript技巧:單例模式的三個(gè)特點(diǎn): 1,該類(lèi)只有一個(gè)實(shí)例 2,該類(lèi)自行創(chuàng)建該實(shí)例(在該類(lèi)內(nèi)部創(chuàng)建自身的實(shí)例對(duì)象) 3,向整個(gè)系統(tǒng)公開(kāi)這個(gè)實(shí)例接口 Java中大概是這個(gè)樣子 代碼如下: class Singleton { //私有,靜態(tài)的類(lèi)自身實(shí)例 private static Singlet

單例模式的三個(gè)特點(diǎn):
1,該類(lèi)只有一個(gè)實(shí)例
2,該類(lèi)自行創(chuàng)建該實(shí)例(在該類(lèi)內(nèi)部創(chuàng)建自身的實(shí)例對(duì)象)
3,向整個(gè)系統(tǒng)公開(kāi)這個(gè)實(shí)例接口
Java中大概是這個(gè)樣子
代碼如下:
class Singleton {
//私有,靜態(tài)的類(lèi)自身實(shí)例
private static Singleton instance = new Singleton();
//私有的構(gòu)造子(構(gòu)造器,構(gòu)造函數(shù),構(gòu)造方法)
private Singleton(){}
//公開(kāi),靜態(tài)的工廠方法
public static Singleton getInstance() {
return instance;
}
}

使用時(shí)
代碼如下:
Singleton obj = Singleton.getInstance();

這個(gè)單例類(lèi)在自身被加載時(shí)instance會(huì)被實(shí)例化,即便加載器是靜態(tài)的。因此,對(duì)于資源密集,配置開(kāi)銷(xiāo)較大的單體更合理的做法是將實(shí)例化(new)推遲到使用它的時(shí)候。即惰性加載(Lazy loading),它常用于那些必須加載大量數(shù)據(jù)的單體。修改下
代碼如下:
class LazySingleton {
//初始為null,暫不實(shí)例化
private static LazySingleton instance = null;
//私有的構(gòu)造子(構(gòu)造器,構(gòu)造函數(shù),構(gòu)造方法)
private LazySingleton(){}
//公開(kāi),靜態(tài)的工廠方法,需要使用時(shí)才去創(chuàng)建該單體
public static LazySingleton getInstance() {
if( instance == null ) {
instance = new LazySingleton();
}
return instance;
}
}

使用方式同上。
單例模式是Javascript最基本,最有用的模式之一。它提供了一種將代碼組織為一個(gè)邏輯單元的手段,這個(gè)邏輯單元中的代碼通過(guò)單一的變量進(jìn)行訪問(wèn)。
單體在Javascipt中有許多用處,可以用來(lái)劃分命名空間,以減少全局變量的泛濫。還可以用在分支技術(shù)中用來(lái)處理各瀏覽器的差異。
Javascript中單例模式的實(shí)現(xiàn)方式有多種,每一種都有自身的優(yōu)點(diǎn)或缺點(diǎn)。
1,對(duì)象直接量實(shí)現(xiàn)最基本,最簡(jiǎn)單的單體
代碼如下:
var Singleton = {
attr1 : 1,
attr2 : 'hello',
method1 : function(){alert(this.attr2);},
method2 : function(arg){}
}

這種方式中,對(duì)象所有成員都通過(guò)Singleton加點(diǎn)號(hào)訪問(wèn)。所有成員是公開(kāi)的,沒(méi)有私有的。在執(zhí)行到變量Singleton時(shí),會(huì)加載(實(shí)例化)自身,即非惰性加載。
此外method1用this訪問(wèn)單體的其它成員會(huì)存在一些風(fēng)險(xiǎn),因?yàn)閙ethod1的上下文不是總是指向Singleton對(duì)象。
比如當(dāng)把method1作為事件監(jiān)聽(tīng)器時(shí),this可能指向的是dom元素,這時(shí)可能會(huì)提示undefined。
2,閉包實(shí)現(xiàn)私有成員的單體
代碼如下:
var Singleton = function(){
var attr = 1, fn = function(){};
return {
method : function(){ fn(); },
getAttr : function(){ return attr; }
};
}();

這種方式中var定義私有的成員屬性attr,方法fn,然后返回一個(gè)公開(kāi)的接口method和getAttr。今后修改實(shí)現(xiàn)時(shí),接口方法method和getAttr不變,只需修改私有的attr和fn的具體實(shí)現(xiàn)。使用如下
代碼如下:
Singleton.method();
Singleton.getAttr();

3,閉包實(shí)現(xiàn)私有成員的惰性實(shí)例化單體
代碼如下:
var LazySingleton = function(){
var attr = 1, fn = function(){};
var obj = {
method : function(){ fn(); },
getAttr : function(){ return attr; }
};
function init(){
return obj;
}
return {getInstace: init};
}();

適用場(chǎng)合上面已經(jīng)提到:對(duì)于那些必須加載大量數(shù)據(jù)的單體直到需要使用它的時(shí)候才實(shí)例化。使用方式是這樣的
代碼如下:
LazySingleton.getInstance().method();
LazySingleton.getInstance().getAttr();

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

javascript單例/單體模式(Singleton)_javascript技巧

javascript單例/單體模式(Singleton)_javascript技巧:單例模式的三個(gè)特點(diǎn): 1,該類(lèi)只有一個(gè)實(shí)例 2,該類(lèi)自行創(chuàng)建該實(shí)例(在該類(lèi)內(nèi)部創(chuàng)建自身的實(shí)例對(duì)象) 3,向整個(gè)系統(tǒng)公開(kāi)這個(gè)實(shí)例接口 Java中大概是這個(gè)樣子 代碼如下: class Singleton { //私有,靜態(tài)的類(lèi)自身實(shí)例 private static Singlet
推薦度:
標(biāo)簽: javascript 單體 單例模式
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top