單例模式在前端開發中,有著廣泛的應用場景,像前端快取、頁面模態框的創建等,只需要初始化一次,后面直接取之前的實體就好了,通俗來說,單例模式就是保證全域僅有一個實體,并且能夠全域訪問,核心就是這兩點,
const Singleton = function (name) { this.name = name }; Singleton.prototype.getName = function () { console.log(this.name) }; Singleton.getInstance = (function () { let instance = null; return function (name) { if (!instance) { instance = new Singleton(name) } return instance } })();
在JavaScript中,實作一個全域變數,最簡單的就是宣告一個全域變數,但是會容易造成變數污染,不建議使用,采用閉包封裝私有變數,是一個不錯的選擇,如上述代碼所示,在構造方法上宣告一個獲取實體的方法,宣告一個私有變數,回傳的方法中保存中對私有變數的參考,利用閉包,就能夠一直保持每次獲取的值是一樣的,
單例模式還有一個比較有用的地方就是在我們給DOM元素系結事件時,如果只想系結一次,防止重復系結,那么此時,也可以利用單例模式的原理,封裝一個簡單的單例方法,如下所示:
const getSingle = function (fn) { let result; return function () { return result || (result = fn.apply(this, arguments)) } };
如下測驗代碼:
const test = getSingle(function () { console.log(new Date().getTime()); return true }); test(); test(); test();

雖然test方法呼叫了三次,但是實際上只執行了一次,因為第一次回傳值是true,后面呼叫就直接return了,不會再走或的邏輯了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/164075.html
標籤:JavaScript
上一篇:JavaScript 基于HTML5 canvas 獲取文本占用的像素寬度
下一篇:一起學Vue之計算屬性和偵聽器
