Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用static关键字定义带参数的单例模式?_Javascript_Node.js_Import_Singleton_Export - Fatal编程技术网

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

Javascript 如何使用static关键字定义带参数的单例模式?,javascript,node.js,import,singleton,export,Javascript,Node.js,Import,Singleton,Export,根据来自的第二个答案,我试图在JS中创建单例模式,用于存储数据并从其他实例调用其原型 一个主要问题是,Singleton在收到第一个实例后不存储数据 [{…}] 0:{姓氏:“约翰”,姓氏:“格兰德”} 我就是这样做的: export default class Terminal { static cache(output) { // Singleton if (!Terminal.instance) { Terminal.inst

根据来自的第二个答案,我试图在JS中创建
单例
模式,用于存储数据并从其他实例调用其原型

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

[{…}] 0:{姓氏:“约翰”,姓氏:“格兰德”}

我就是这样做的:

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()
方法需要将
输出
推送到
日志
数组中

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