JavaScript的單例模式 (singleton in Javascript)
更新時(shí)間:2010年06月11日 00:28:44 作者:
JavaScript的單例模式 (singleton in Javascript)
單例模式的基本結(jié)構(gòu):
MyNamespace.Singleton = function() {
return {};
}();
比如:
MyNamespace.Singleton = (function() {
return { // Public members.
publicAttribute1: true,
publicAttribute2: 10,
publicMethod1: function() {
...
},
publicMethod2: function(args) {
...
}
};
})();
但是,上面的Singleton在代碼一加載的時(shí)候就已經(jīng)建立了,怎么延遲加載呢?想象C#里怎么實(shí)現(xiàn)單例的:)采用下面這種模式:
MyNamespace.Singleton = (function() {
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
// Control code goes here.
}
}
})();
具體來(lái)說(shuō),把創(chuàng)建單例的代碼放到constructor里,在首次調(diào)用的時(shí)候再實(shí)例化:
完整的代碼如下:
MyNamespace.Singleton = (function() {
var uniqueInstance; // Private attribute that holds the single instance.
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
if(!uniqueInstance) { // Instantiate only if the instance doesn't exist.
uniqueInstance = constructor();
}
return uniqueInstance;
}
}
})();
復(fù)制代碼 代碼如下:
MyNamespace.Singleton = function() {
return {};
}();
比如:
復(fù)制代碼 代碼如下:
MyNamespace.Singleton = (function() {
return { // Public members.
publicAttribute1: true,
publicAttribute2: 10,
publicMethod1: function() {
...
},
publicMethod2: function(args) {
...
}
};
})();
但是,上面的Singleton在代碼一加載的時(shí)候就已經(jīng)建立了,怎么延遲加載呢?想象C#里怎么實(shí)現(xiàn)單例的:)采用下面這種模式:
復(fù)制代碼 代碼如下:
MyNamespace.Singleton = (function() {
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
// Control code goes here.
}
}
})();
具體來(lái)說(shuō),把創(chuàng)建單例的代碼放到constructor里,在首次調(diào)用的時(shí)候再實(shí)例化:
完整的代碼如下:
復(fù)制代碼 代碼如下:
MyNamespace.Singleton = (function() {
var uniqueInstance; // Private attribute that holds the single instance.
function constructor() { // All of the normal singleton code goes here.
...
}
return {
getInstance: function() {
if(!uniqueInstance) { // Instantiate only if the instance doesn't exist.
uniqueInstance = constructor();
}
return uniqueInstance;
}
}
})();
您可能感興趣的文章:
- js單例模式的兩種方案
- JS實(shí)現(xiàn)單例模式的6種方案匯總
- javascript 單例模式演示代碼 javascript面向?qū)ο缶幊?/a>
- 輕松掌握J(rèn)avaScript單例模式
- [js高手之路]單例模式實(shí)現(xiàn)模態(tài)框的示例
- JavaScript設(shè)計(jì)模式之策略模式詳解
- javascript設(shè)計(jì)模式--策略模式之輸入驗(yàn)證
- JavaScript設(shè)計(jì)模式之策略模式實(shí)例
- 學(xué)習(xí)JavaScript設(shè)計(jì)模式之策略模式
- 學(xué)習(xí)JavaScript設(shè)計(jì)模式(策略模式)
- javascript單例模式與策略模式實(shí)例詳解
相關(guān)文章
js類(lèi)后臺(tái)管理菜單類(lèi)-MenuSwitch
js類(lèi)后臺(tái)管理菜單類(lèi)-MenuSwitch...2007-09-09
JavaScript 核心參考教程 內(nèi)置對(duì)象
JavaScript 是根據(jù) "ECMAScript"標(biāo)準(zhǔn)制定的網(wǎng)頁(yè)腳本語(yǔ)言。這個(gè)標(biāo)準(zhǔn)由 ECMA 組織發(fā)展和維護(hù)。ECMA-262 是正式的 JavaScript 標(biāo)準(zhǔn)。2009-10-10
編寫(xiě)可維護(hù)面向?qū)ο蟮腏avaScript代碼[翻譯]
編寫(xiě)可維護(hù)面向?qū)ο蟮腏avaScript代碼[翻譯],學(xué)習(xí)js面向?qū)ο缶帉?xiě)的朋友可以參考下。2011-02-02
javascript 面向?qū)ο?function類(lèi)
javascript中的類(lèi)是用函數(shù)function表示的2010-05-05
JavaScript接口實(shí)現(xiàn)代碼 (Interfaces In JavaScript)
接口是面向?qū)ο缶幊汤锏闹匾匦?,遺憾的是JavaScript并沒(méi)有提供對(duì)接口的支持!怎么實(shí)現(xiàn)接口呢?2010-06-06
AppBaseJs 類(lèi)庫(kù) 網(wǎng)上常用的javascript函數(shù)及其他js類(lèi)庫(kù)寫(xiě)的
AppBaseJs類(lèi)庫(kù)。一個(gè)借鑒了網(wǎng)上常用的函數(shù)及其他js類(lèi)庫(kù)寫(xiě)的,方便大家的調(diào)用。2010-03-03
一個(gè)cssQuery對(duì)象 javascript腳本實(shí)現(xiàn)代碼
原創(chuàng)的一個(gè)cssQuery對(duì)象,類(lèi)似于jQuery的$函數(shù)通過(guò)css選擇器選擇DOM元素,目前還不支持xPath語(yǔ)法2009-07-07

