国产探花免费观看_亚洲丰满少妇自慰呻吟_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模式》
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 静乐县| 武夷山市| 周至县| 临沭县| 鱼台县| 玉林市| 行唐县| 石阡县| 剑川县| 德令哈市| 苏尼特右旗| 新宁县| 遵义县| 叙永县| 蒙山县| 孝感市| 句容市| 宾川县| 镶黄旗| 天柱县| 湄潭县| 东港市| 大方县| 阿勒泰市| 黔江区| 乌审旗| 宜兰县| 原阳县| 岱山县| 河曲县| 铜鼓县| 峨边| 哈密市| 高淳县| 江口县| 富民县| 昌平区| 山西省| 兴安盟| 花莲县| 清河县|