簡體   English   中英

在 JS 中實現單例時,我應該使用類還是對象文字?

[英]Should I be using a Class or an Object Literal when implementing a singleton in JS?

在使用 TypeScript 和 React 創建 Web 應用程序時,我經常發現自己需要使用基於單例的模式。 以前我總是像這樣用對象字面量來實現這些:

interface IExample {
    var_one: string;
    var_two: boolean;

    func_one: () => void;
    func_two: () => void;
}

const Example:IExample = {
    var_one: "",
    var_two: false,

    func_one() {
        return;
    },

    func_two() {
        return;
    }
}

我更願意使用基於類的系統,但想知道這是否有任何缺點,或者每種系統的優缺點是什么。 一個例子是:

class ExampleClass
{
    private static _instance:ExampleClass = new ExampleClass();

    constructor() {
        if(ExampleClass._instance){
            throw new Error("Instance already created");
        }
        ExampleClass._instance = this;
    }
}

我以前只在我的代碼中真正使用過對象文字模式,但如果兩者之間沒有什么區別,我更願意使用基於類的系統。

我同意更喜歡使用類。 我可以想到類提供的一些使用 pojo 所沒有的明顯優勢:

  1. 私有受保護的方法/成員。
  2. 遺產。 如果您需要定義一個類似的對象,您可以非常快速和輕松地extendsuper化它。
  3. object factory行為的更簡單語法。

我會說你計划讓它變得越復雜 - 一個類的選擇就越明顯。 在 javascript 中——幾乎所有東西都已經是一個對象和類,只需添加幾個快捷方式。 使用 pojo 的唯一優勢是語法簡單。

您可能有興趣了解模塊已經是單例,因此您可以利用模塊系統來實現您的需要。

export class MyClass {
  constructor(readonly foo: string) {}
}

export const instance = new MyClass("bar");

在您的消費模塊中,您可以導入類或您的單例實例。

import { instance } from "./lib";

instance.foo // bar

暫無
暫無

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

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