Javascript實(shí)現(xiàn)單例模式
單例模式也稱(chēng)作為單子模式,更多的也叫做單體模式。為軟件設(shè)計(jì)中較為簡(jiǎn)單但是最為常用的一種設(shè)計(jì)模式。
單例模式的介紹:
在應(yīng)用單例模式時(shí),生成單例的類(lèi)必須保證只有一個(gè)實(shí)例的存在,很多時(shí)候整個(gè)系統(tǒng)只需要擁有一個(gè)全局對(duì)象,才有利于協(xié)調(diào)系統(tǒng)整體的行為。比如在整個(gè)系統(tǒng)的配置文件中,配置數(shù)據(jù)有一個(gè)單例對(duì)象進(jìn)行統(tǒng)一讀取和修改,其他對(duì)象需要配置數(shù)據(jù)的時(shí)候也統(tǒng)一通過(guò)該單例對(duì)象來(lái)獲取配置數(shù)據(jù),這樣就可以簡(jiǎn)化復(fù)雜環(huán)境下的配置管理。
單例模式的思路是:一個(gè)類(lèi)能返回一個(gè)對(duì)象的引用(并且永遠(yuǎn)是同一個(gè))和一個(gè)獲得該實(shí)例的方法(靜態(tài)方法,通常使用 getInstance 名稱(chēng))。那么當(dāng)我們調(diào)用這個(gè)方法時(shí),如果類(lèi)持有的引用不為空就返回該引用,否者就創(chuàng)建該類(lèi)的實(shí)例,并且將實(shí)例引用賦值給該類(lèi)保持的那個(gè)引用再返回。同時(shí)將該類(lèi)的構(gòu)造函數(shù)定義為私有方法,避免其他函數(shù)使用該構(gòu)造函數(shù)來(lái)實(shí)例化對(duì)象,只通過(guò)該類(lèi)的靜態(tài)方法來(lái)得到該類(lèi)的唯一實(shí)例。
一般情況下,Javascript每次new一個(gè)對(duì)象就產(chǎn)生一個(gè)實(shí)例,實(shí)例指向不同的地址。就像如下:
(function(){
function Person(name){
this.name = name;
}
Person.prototype.work = function(){
console.log(this.name + " is working");
}
var p1 = new Person("Darren");
p1.work();
var p2 = new Person("Jack");
p2.work();
}());
以上,每次new出一個(gè)Person對(duì)象都是不同的。
如何在Javascript中實(shí)現(xiàn)單例模式呢?
--在生成某各對(duì)象時(shí)先判斷是否存在。存在就不生成對(duì)象,不存在就生成對(duì)象。
(function(){
var PersonSingleton = (function(){
var instance;
function init(){
return {
name: 'Anonymous',
work: function(){
console.log(this.name + ' working');
}
};
}
return {
getInstance: function(){
if(!instantiated){
instantiated = init();
}
return instantiated;
}
}
})();
var p1 = PersonSingleton.getInstance();
p1.work();
var p2 = PersonSingleton.getInstance();
p2.work();
}());
以上,通過(guò)PsonSIngleton對(duì)象的getInstance方法得到的實(shí)例每次都是一樣的。
關(guān)于javascript單例模式的相關(guān)知識(shí)就給大介紹到這里,希望對(duì)大家有所幫助。
相關(guān)文章
深入理解Javascript中的循環(huán)優(yōu)化
這篇文章介紹了Javascript中的循環(huán)優(yōu)化,有需要的朋友可以參考一下2013-11-11
javascript+mapbar實(shí)現(xiàn)地圖定位
地圖定位 圖吧地圖定位 附j(luò)avascript源碼每行都有注釋2010-04-04
jquery和css3中的選擇器nth-child使用方法和用途示例
nth-child(),是CSS3中的一個(gè)偽類(lèi)選擇符,JQuery選擇器繼承了CSS的部分語(yǔ)法,允許通過(guò)標(biāo)簽名、屬性名、內(nèi)容對(duì)DOM元素進(jìn)行快速、準(zhǔn)確的選擇。2023-03-03
js報(bào)錯(cuò):Maximum?call?stack?size?exceeded的解決方法
這篇文章主要給大家介紹了關(guān)于js報(bào)錯(cuò)Maximum?call?stack?size?exceeded的解決方法,文中通過(guò)實(shí)例代碼將解決的方法介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
javascript轉(zhuǎn)換日期字符串為Date日期對(duì)象的方法
這篇文章主要介紹了javascript轉(zhuǎn)換日期字符串為Date日期對(duì)象的方法,是非常實(shí)用的轉(zhuǎn)換技巧,需要的朋友可以參考下2015-02-02
django js 實(shí)現(xiàn)表格動(dòng)態(tài)標(biāo)序號(hào)的實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了django js 實(shí)現(xiàn)表格動(dòng)態(tài)標(biāo)序號(hào) ,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07

