我有以下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}}方法中设置的新选项。
答案 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
也不会引用新值。
您要执行的操作是:
使用空对象初始化ClassB
的{{1}}:
ClassA
将其传递给this.options
的构造函数。此处无需更改。
调用options: ClassOption = {};
时,更改同一对象,而不是用新对象替换。您可以使用Object.assign
合并两个对象:
ClassB
在这里您可以看到它在纯JavaScript中工作:
ChangeOptions