【问题标题】:Nodejs Calling the class multiple timesNodejs多次调用类
【发布时间】:2022-12-03 23:58:59
【问题描述】:

我有这样简单的课程;

class Foo {
    constructor() {
        this.datas = {}
    }

    set(key, data) {
        return this.datas[key] = data
    }

    get(key) {
        return this.datas[key]
    }
}

module.exports = Foo

我首先将一些数据添加到datas veriable。但是当我下次打电话给同一个班级时,可验证的并不是那样保存;

const foo1 = Foo()
foo1.set('a',[1,2,3])
const foo2 = Foo()
var aData = foo2.get('a')
console.log(aData)

但数据没有得到。我该如何解决?

【问题讨论】:

  • 有什么理由不使用foo1.get('a')
  • 我打算在另一个文件中上课。真正的问题并不完全是那样,而是同样的情况

标签: node.js class


【解决方案1】:

您在 Foo 类中定义的 datas 属性不会在该类的实例之间保存,因为它是在构造函数中定义的。这意味着每次使用 const foo = new Foo() 创建一个新的 Foo 对象时,都会为该对象创建一个新的 datas 属性,并且不会与 Foo 类的其他实例共享。

如果你想被类的所有实例共享。参考Javascript ES6 shared class variable

【讨论】:

    【解决方案2】:

    您可以将对象传递给其他类构造函数,

    https://stackblitz.com/edit/node-k3vqtp?file=index.js

    或者使用全局变量

    global.foo = new Foo();
    global.foo.set('a', [1, 2, 3]);
    

    或者使用InversifyJS之类的包来注入你的类

    ...
    @injectable()
    export default class A implements IA {
      private _foo!: Foo;
      public get foo(): Foo {
        return this._foo;
      }
      public set foo(v: Foo) {
        this._foo = v;
      }
    
      constructor(
        @inject(TYPES.Foo) foo: Foo,
      ) {
        this.foo = foo;
      }
    ...
    

    传递数据的方法有很多种,您必须找到最适合您的方案的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      相关资源
      最近更新 更多