簡體   English   中英

從構造函數初始化單個實例,並將其用作另一個類中的靜態方法

[英]Initiate single instance from a constructor and use it as static method in another class

我在整個應用程序中使用了一類實用程序,其中包含一種格式化數字的方法

class Utils {
    static numberFormater () {
        return new Intl.NumberFormat('en-US')
    }
}

問題是,每當我調用它時,它將返回新的numberFormat實例(這會影響代碼的性能)

我想創建一個實例並在每次調用此方法時使用它

為什么不簡單地直接創建數字格式化程序的實例呢? 甚至不需要是靜態屬性:

 class Util { constructor () { this.numberFormatter = new Intl.NumberFormat('en-US'); } } const util = new Util; const formatter = util.numberFormatter; const formatter2 = util.numberFormatter; console.log(formatter1 === formatter2); 

嘗試添加用於初始化numberFormater構造函數。

 class Util { constructor(locale) { this.numberFormater = new Intl.NumberFormat(locale); } static numberFormater() { return this.numberFormatter; } } var a = new Util('en-US'); console.log(a.numberFormater.format); 

如果要創建一個實例並每次使用它,可以使用Singleton模式

單例設計模式解決了以下問題:

  1. 如何確保一個類只有一個實例?
  2. 如何輕松訪問類的唯一實例?
  3. 類如何控制其實例化?
  4. 如何限制一個類的實例數?

您可以閱讀有關模式和javascript的更多信息:

  1. ES6中的單例模式
  2. 單例模式與示例
  3. JavaScript設計模式:單例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM