gpt4 book ai didi

javascript - 如何使用 static 关键字定义带参数的单例模式?

转载 作者:行者123 更新时间:2023-12-02 22:52:06 27 4
gpt4 key购买 nike

根据here的第二个答案,我试图在 JS 中创建 Singleton 模式来存储数据并从其他实例调用其原型(prototype)。

一个主要问题是Singleton在收到第一个实例后不存储数据。

[{…}] 0: {firstName: "John", lastName: "Grand"}

这就是我所做的:

export default class Terminal {
static cache(output) {
// Singleton
if (!Terminal.instance) {
Terminal.instance = new Terminal(output);
}
return Terminal.instance;
}
constructor(output) {
// Create an array
this.logs = [];

// Switch to an object
const data = Object.assign({}, output);

// Add the object to the array
this.logs.push(data);

// Inspect
console.log(this.logs);
}
}

// instance 1
import Terminal from './terminal.js';
class Person {
constructor(firstName, lastName, input) {
this.firstName = firstName;
this.lastName = lastName;

// Assign the Singleton
this.input = input || Terminal.cache(this);
}
}
let player1 = new Person('John', 'Grand');

// instance 2
import Terminal from './terminal.js';
class Grocery {
constructor(name, stock, input) {
this.name = name;
this.stock = stock;

// Assign the Singleton
this.input = input || Terminal.cache(this);
}
}
let shop1 = new Grocery('Apple', 12);

当我定义 Singleton 模式时,我想在类内部使用 new 关键字。

有什么技巧可以解决我的问题吗?

谢谢。

最佳答案

当对象已经存在时,cache()方法需要将output推送到logs数组。

    static cache(output) {
// Singleton
if (!Terminal.instance) {
Terminal.instance = new Terminal(output);
} else {
Terminal.instance.logs.push(Object.assign({}, output));
}
return Terminal.instance;
}

关于javascript - 如何使用 static 关键字定义带参数的单例模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58147510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com