在不同的TypeScript类之间共享和变异对象

时间:2018-11-10 03:30:15

标签: javascript angular typescript reference es6-class

我有以下TypeScript代码:

class ClassA {
    options: ClassOption;
    B: ClassB;

    constructor() {
        this.B = new ClassB(this.options);
        this.changeOptions();
    }

    changeOptions(): void {
        const newOptions: ClassOption = new ClassOption("something");
        this.options = newOptions;
    } 
}

class ClassB {
    options: ClassOption;

    constructor(opts: ClassOptions) {
        this.options = opts;
    }

    someFunction(): ClassOption {
        return this.options;
    }
}

问题是当我实例化ClassA时:

const a = new ClassA();

a.B.someFunction();返回undefined,而不是ClassA的{​​{1}}方法中设置的新选项。

1 个答案:

答案 0 :(得分:0)

ClassA的构造函数中,您可以这样做:

this.B = new ClassB(this.options);

this.options仍然是undefined,因此基本上在ClassB的构造函数中,您的工作:

this.options = opt;

您只是将this.options设置为undefined而不是为其分配对ClassA的{​​{1}}的引用,该引用由于尚未初始化而不存在

即使您用空对象初始化options中的options,如果为其分配(ClassA)新值,this.options = something也不会引用新值。

您要执行的操作是:

  1. 使用空对象初始化ClassB的{​​{1}}:

    ClassA
  2. 将其传递给this.options的构造函数。此处无需更改。

  3. 调用options: ClassOption = {}; 时,更改同一对象,而不是用新对象替换。您可以使用Object.assign合并两个对象:

    ClassB

在这里您可以看到它在纯JavaScript中工作:

ChangeOptions