国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

javascript設計模式:單例模式(Singleton)

2024-04-27 15:11:12
字體:
來源:轉載
供稿:網友

定義

保證一個特定類僅有一個實例。如果第二次使用同一個類創建新對象的時候,應該得到與第一次所創建對象完全相同的對象


補充知識

自執行函數

(function Fun(){ console.log('work!'); })(); // Output: work!講解 //相當于是先 let tmp = function Fun(){ console.log('work!'); } //然后 tmp(); //Output: work!

就是把tmp換為聲明的函數,省去了聲明另一個變量的步奏。


arguments

ECMAScript函數中的參數在內部用一個數組來表示。函數接收的始終是這個數組,而不關系數組中所包含的參數(如果有參數的話)

function A(){ console.log(arguments); } A(1,2,3,4,5,6,7,8,9,10);

Output: 這里寫圖片描述


基本格式

'use strict'; let mySingleton = (function(){ //變量instance用于標記存放具體方法的init()函數是否被初始化,并在初始化后用于存放init() let instance; //方程init()內部填寫具體實現方法,不希望對外暴露與修改的寫在函數內部,可以被外部調用與修改的寫在返回值中 function init() { //函數PRivateMethod()不可被外部調用,為私有元素 function privateMethod() { console.log('Private Method'); } //變量privateVar的值不可被外獲取與修改,為私有元素 let privateVar = 'Private var'; return { //變量publicVar可被外部獲取與修改 publicVar: 'Public publicVar', //函數publicFunction可被外部獲取與修改 publicFunction: function() { console.log('Public Method'); } }; } return { //此函數的作用為需要使用init()中具體方法時判斷其是否被初始化 getInstance: function() { if(instance === undefined){ //如果沒有被初始化,則進行初始化 instance = init(); } //返回存放具體方法的init()函數 return instance; } }; })();//測試let A = mySingleton.getInstance();let B = mySingleton.getInstance();console.log(A === B); //Output: true , 說明完全相同,符合定義:指向單一對象console.log(A.publicVar); // Output: Public publicVar(可訪問)A.publicFunction(); //Output: Public Method(可訪問)A.privateMethod(); //Output: TypeError: A.privateMethod is not a function(不可訪問)console.log(A.privateVar);//Output: undefined(不可訪問)

參考與推薦閱讀

深入理解javascript系列之單例模式Learning Javacript Design Patterns《Javascript模式》
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天等县| 古浪县| 包头市| 佛坪县| 普定县| 普宁市| 曲阜市| 三门县| 永清县| 民权县| 北辰区| 华亭县| 灵寿县| 石门县| 涞源县| 荥经县| 南阳市| 比如县| 司法| 明光市| 汕头市| 沾化县| 海丰县| 长葛市| 全州县| 泰和县| 二连浩特市| 库尔勒市| 西昌市| 平定县| 麻栗坡县| 乐平市| 元谋县| 正阳县| 岗巴县| 汉寿县| 天津市| 富民县| 湖北省| 泸溪县| 鹿泉市|