我的typescript类的多个实例似乎指向相同的数据,我该如何解决这个问题呢?

时间:2018-02-15 09:48:50

标签: typescript oop

所以我创建了一个简单的类:

export class myClass {
  private static _instance: myClass;
  public name: string;
  public metrics: Array<Metric>;
  private constructor() {
    this.set_metrics();
    //...
  }

  public static get Instance() {
    // Do you need arguments? Make it a regular method instead.
    return (this._instance = new this());
  }

  public set_model_name( name: string ) {
    this.name = name;
  }

  private set_metrics() {
    this.metrics = _metrics;
  }
}

let metrics: Array<Metric> = [
  {
    a: "one",
    b: "two",
    c: "three"
  },
  {
    a: "four",
    b: "five",
    c: "six"
  }
]

我现在的问题是,当我这样做时:

instance_1 = myClass.Instance;
instance_2 = myClass.Instance;
instance_1.set_metrics([
  {
    a: "seven",
    b: "eight",
    c: "nine"
  },
  {
    a: "ten",
    b: "eleven",
    c: "twelve"
  }
])

我发现两个实例&#39;指标似乎在变化?这是因为在更改指标时,我实际上是在更改原始版本的指标。&#39;定义我定义类的位置?如何使用相同的默认数据实例化不同的实例 - 但允许数据可以独立更改?

我希望这是有道理的,我已经稍微偏离了实际代码的示例,希望能让它更容易看到一些问题

2 个答案:

答案 0 :(得分:0)

来自你的二传手

  private set_metrics(){
      this.metrics = _metrics;
    }

看起来你没有收到任何值,但静态地设置_metrics看起来像某种全局变量

private set_metrics(value: type){
      this.metrics = value;
    }

然后每个班级都有自己的this.metrics。或者你只是传递给同一个对象的所有引用。

答案 1 :(得分:0)

在示例中,您没有使用指标,变量,但无论如何,您有多个解决方案,您可以:

  • 组件外的此数据
  • 并且执行:

    instance_1 = myClass.Instance; instance_2 = myClass.Instance; instance_1.set_metrics([...度量])

使用这种方法,您将创建一个新数组。