中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

深入理解JavaScript系列(25):設計模式之單例模式詳解
來源:易賢網 閱讀:1133 次 日期:2015-03-06 10:41:02
溫馨提示:易賢網小編為您整理了“深入理解JavaScript系列(25):設計模式之單例模式詳解”,方便廣大網友查閱!

這篇文章主要介紹了深入理解JavaScript系列(25):設計模式之單例模式詳解,本文給出了多種單例模式的實現方式,需要的朋友可以參考下

介紹

從本章開始,我們會逐步介紹在JavaScript里使用的各種設計模式實現,在這里我不會過多地介紹模式本身的理論,而只會關注實現。OK,正式開始。

在傳統開發工程師眼里,單例就是保證一個類只有一個實例,實現的方法一般是先判斷實例存在與否,如果存在直接返回,如果不存在就創建了再返回,這就確保了一個類只有一個實例對象。在JavaScript里,單例作為一個命名空間提供者,從全局命名空間里提供一個唯一的訪問點來訪問該對象。

正文

在JavaScript里,實現單例的方式有很多種,其中最簡單的一個方式是使用對象字面量的方法,其字面量里可以包含大量的屬性和方法:

代碼如下:

var mySingleton = {

property1: "something",

property2: "something else",

method1: function () {

console.log('hello world');

}

};

如果以后要擴展該對象,你可以添加自己的私有成員和方法,然后使用閉包在其內部封裝這些變量和函數聲明。只暴露你想暴露的public成員和方法,樣例代碼如下:

代碼如下:

var mySingleton = function () {

/* 這里聲明私有變量和方法 */

var privateVariable = 'something private';

function showPrivate() {

console.log(privateVariable);

}

/* 公有變量和方法(可以訪問私有變量和方法) */

return {

publicMethod: function () {

showPrivate();

},

publicVar: 'the public can see this!'

};

};

var single = mySingleton();

single.publicMethod(); // 輸出 'something private'

console.log(single.publicVar); // 輸出 'the public can see this!'

上面的代碼很不錯了,但如果我們想做到只有在使用的時候才初始化,那該如何做呢?為了節約資源的目的,我們可以另外一個構造函數里來初始化這些代碼,如下:

代碼如下:

var Singleton = (function () {

var instantiated;

function init() {

/*這里定義單例代碼*/

return {

publicMethod: function () {

console.log('hello world');

},

publicProperty: 'test'

};

}

return {

getInstance: function () {

if (!instantiated) {

instantiated = init();

}

return instantiated;

}

};

})();

/*調用公有的方法來獲取實例:*/

Singleton.getInstance().publicMethod();

知道了單例如何實現了,但單例用在什么樣的場景比較好呢?其實單例一般是用在系統間各種模式的通信協調上,下面的代碼是一個單例的最佳實踐:

代碼如下:

var SingletonTester = (function () {

//參數:傳遞給單例的一個參數集合

function Singleton(args) {

//設置args變量為接收的參數或者為空(如果沒有提供的話)

var args = args || {};

//設置name參數

this.name = 'SingletonTester';

//設置pointX的值

this.pointX = args.pointX || 6; //從接收的參數里獲取,或者設置為默認值

//設置pointY的值

this.pointY = args.pointY || 10;

}

//實例容器

var instance;

var _static = {

name: 'SingletonTester',

//獲取實例的方法

//返回Singleton的實例

getInstance: function (args) {

if (instance === undefined) {

instance = new Singleton(args);

}

return instance;

}

};

return _static;

})();

var singletonTest = SingletonTester.getInstance({ pointX: 5 });

console.log(singletonTest.pointX); // 輸出 5

其它實現方式

方法1:

代碼如下:

function Universe() {

// 判斷是否存在實例

if (typeof Universe.instance === 'object') {

return Universe.instance;

}

// 其它內容

this.start_time = 0;

this.bang = "Big";

// 緩存

Universe.instance = this;

// 隱式返回this

}

// 測試

var uni = new Universe();

var uni2 = new Universe();

console.log(uni === uni2); // true

方法2:

代碼如下:

function Universe() {

// 緩存的實例

var instance = this;

// 其它內容

this.start_time = 0;

this.bang = "Big";

// 重寫構造函數

Universe = function () {

return instance;

};

}

// 測試

var uni = new Universe();

var uni2 = new Universe();

uni.bang = "123";

console.log(uni === uni2); // true

console.log(uni2.bang); // 123

方法3:

代碼如下:

function Universe() {

// 緩存實例

var instance;

// 重新構造函數

Universe = function Universe() {

return instance;

};

// 后期處理原型屬性

Universe.prototype = this;

// 實例

instance = new Universe();

// 重設構造函數指針

instance.constructor = Universe;

// 其它功能

instance.start_time = 0;

instance.bang = "Big";

return instance;

}

// 測試

var uni = new Universe();

var uni2 = new Universe();

console.log(uni === uni2); // true

// 添加原型屬性

Universe.prototype.nothing = true;

var uni = new Universe();

Universe.prototype.everything = true;

var uni2 = new Universe();

console.log(uni.nothing); // true

console.log(uni2.nothing); // true

console.log(uni.everything); // true

console.log(uni2.everything); // true

console.log(uni.constructor === Universe); // true

方式4:

代碼如下:

var Universe;

(function () {

var instance;

Universe = function Universe() {

if (instance) {

return instance;

}

instance = this;

// 其它內容

this.start_time = 0;

this.bang = "Big";

};

} ());

//測試代碼

var a = new Universe();

var b = new Universe();

alert(a === b); // true

a.bang = "123";

alert(b.bang); // 123

更多信息請查看IT技術專欄

更多信息請查看腳本欄目
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
在线视频欧美日韩| 亚洲精品一区二区在线| 国产一区二区成人久久免费影院| 免费一区视频| 亚洲欧美变态国产另类| 亚洲激情影院| 精品二区久久| 国产一区二区三区奇米久涩| 欧美午夜宅男影院| 国产精品一二三四| 国产午夜精品久久久久久免费视| 国产欧美一区二区色老头| 亚洲视频在线观看视频| 一区二区三区av| 一区二区欧美亚洲| 欧美主播一区二区三区| 欧美色精品天天在线观看视频| 亚洲天堂成人在线观看| 国产一区二区中文字幕免费看| 欧美日韩一区二区在线观看视频| 欧美另类女人| 国产伪娘ts一区| 国产一区999| 一区二区高清在线| 欧美一区二区三区视频免费播放| 午夜精品一区二区三区四区| 性一交一乱一区二区洋洋av| 国产精品99久久久久久久女警| 亚洲精品资源美女情侣酒店| 亚洲激情视频在线| 欧美一级在线播放| 国产日韩欧美a| 99国产精品视频免费观看| 亚洲自拍偷拍视频| 久久免费视频观看| 国产精品久久久久久影视| 亚洲精品日韩精品| 久久久久久国产精品mv| 在线成人亚洲| 国产精品午夜国产小视频| 精品不卡一区二区三区| 亚洲国产精品一区制服丝袜| 亚洲欧美在线aaa| 亚洲国产日韩欧美| 亚洲三级视频| 国产精品视频内| 国产欧美精品在线播放| 欧美国产日韩精品| 国产精品99免费看| 在线看无码的免费网站| 欧美精品在线观看播放| 激情小说另类小说亚洲欧美 | 欧美91大片| 亚洲精品网址在线观看| 狼狼综合久久久久综合网 | 99国产精品久久| 欧美日韩123| 夜夜嗨av一区二区三区四区| 国产美女诱惑一区二区| 欧美一区精品| 国产精品福利在线| 久久久不卡网国产精品一区| 国产午夜精品一区二区三区欧美| 尤物九九久久国产精品的特点| 米奇777超碰欧美日韩亚洲| 亚洲一区高清| 亚洲深夜福利网站| 极品av少妇一区二区| 久久中文字幕一区二区三区| 精品成人一区二区三区| 国内免费精品永久在线视频| 亚洲欧美日产图| 国产午夜精品美女毛片视频| 久久精品观看| 91久久综合亚洲鲁鲁五月天| 欧美日韩成人一区二区| 亚洲一区二区精品视频| 亚洲国产精品传媒在线观看| 欧美高清自拍一区| 国外成人免费视频| 国语自产在线不卡| 国产精品av久久久久久麻豆网| 久久精品国产精品亚洲| 国产麻豆日韩| 日韩一级不卡| 韩日精品在线| 欧美视频在线免费看| 在线视频日本亚洲性| 亚洲精品乱码久久久久久黑人 | 国产精品国产三级国产aⅴ浪潮| 久久久综合视频| 免费欧美电影| 欧美日韩在线三区| 国产一区二区三区丝袜 | 欧美视频一二三区| 欧美精彩视频一区二区三区| 亚洲精品一区中文| 在线观看不卡av| 精品成人国产| 亚洲高清久久久| 一区二区三区精密机械公司| 在线观看一区欧美| 在线日韩中文| 亚洲色图综合久久| 欧美伊人久久| 欧美日本三区| 国产视频在线观看一区| 一区二区三区成人精品| 久久资源在线| 国产午夜久久久久| 亚洲女人天堂av| 欧美伦理视频网站| 在线看一区二区| 久久国产夜色精品鲁鲁99| 国产精品久久久久久久久久免费看 | av不卡免费看| 欧美午夜在线视频| 亚洲欧美另类国产| 国产欧美欧美| 国产欧美综合一区二区三区| 亚洲欧美日韩天堂| 欧美日韩精品三区| 国产一区二区三区日韩欧美| 91久久综合| 亚洲人成人99网站| 国产精品天美传媒入口| 激情综合色综合久久综合| 久久精品91久久香蕉加勒比| 欧美成人精品一区二区三区| 欧美精品一区三区| 国产日本亚洲高清| 欧美专区在线观看| 久久久久久久999| 国产精品日韩欧美一区二区三区| 日韩亚洲国产精品| 国产精品福利网站| 久久影音先锋| 永久久久久久| 久久久爽爽爽美女图片| 国产精品欧美激情| 欧美一区二区在线免费播放| 国产精品扒开腿爽爽爽视频| 亚洲免费成人av| 国产精品久在线观看| 久久国产精品一区二区三区四区 | 亚洲国产精品久久久久秋霞不卡| 性一交一乱一区二区洋洋av| 亚洲国产精品成人| 欧美区视频在线观看| 性欧美大战久久久久久久免费观看 | 欧美国产三区| 亚洲另类在线一区| 国产日韩欧美一区| 欧美激情一区二区三区全黄| 99re这里只有精品6| 国内成人精品2018免费看| 久久久xxx| 一区二区三区视频在线观看| 国产精品日韩精品欧美精品| 欧美福利精品| 久久网站热最新地址| 日韩小视频在线观看| 国产日韩欧美一区在线 | 久久久久久成人| 亚洲美女视频在线观看| 国产精品久久久久久户外露出| 久久综合中文字幕| 亚洲欧美影院| 日韩亚洲精品视频| 欧美电影在线播放| 亚洲免费视频网站| 亚洲人成啪啪网站| 国产精品视频网站| 欧美成人亚洲| 99国内精品久久| 亚洲欧美日本国产有色| 日韩视频二区| 国产精品久久久久一区二区三区共| 亚洲图片欧洲图片日韩av| 国产精品成人一区二区三区夜夜夜| 欧美日韩综合视频| 亚洲欧美日本日韩| 国产精品99久久久久久人| 国产精品久久久久久久久久免费| 欧美日韩伦理在线| 欧美—级a级欧美特级ar全黄| 亚洲黄一区二区| 激情久久久久久久久久久久久久久久| 欧美一区二区日韩| 欧美一区二区视频97| 亚洲特黄一级片| 亚洲精品美女| 日韩一本二本av| 日韩亚洲在线观看| 亚洲理伦在线| 久久精品国亚洲| 欧美日韩专区在线| 一区二区亚洲欧洲国产日韩| 亚洲视频免费在线观看| 久久久人成影片一区二区三区观看 |