Skip to content

单例模式

js
export class Request {
	static instance;

	constructor() {
		this.cache = {};
	}

	// 获取全局唯一实例
	static getInstance() {
		if (this.instance) {
			return this.instance;
		}
		this.instance = new Request();
		return this.instance;
	}

	async request(url) {
		// 发送请求
	}
}

const request = Request.getInstance();
await request.request("/api/1");

代理实现

ts
export function singleton<T extends new (...args: any[]) => any>(classname: T): T {
    let instance: InstanceType<T>;
    const singletonClass = new Proxy(classname, {
        construct(target, args) {
            if (!instance) {
                instance = Reflect.construct(target, args);
            }
            return instance;
        },
    });

    (singletonClass as any).prototype.constructor = singletonClass;

    return singletonClass;
}

苏ICP备2025160170号-1 | 前端进化之路 | Released under the MIT License.