gpt4 book ai didi

typescript - 从基类调用方法时,父类中尚未初始化的值

转载 作者:行者123 更新时间:2023-12-03 20:48:18 24 4
gpt4 key购买 nike

我们有以下结构

abstract class testParent{
constructor(){
console.log(this.doSomething());
}

abstract doSomething():string;
}

class testChild extends testParent{
private x:string = 'someValue';

constructor(){
super();
}

doSomething():string{
return this.x;
}
}

const y = new testChild();
我们注意到字符串 x 尚未初始化,因此它返回 undefined。但是我们想要这种结构。有哪些方法可以解决这个问题?
我们想到了一个解决方案
abstract class testParent{
constructor(){
this.initialize();
console.log(this.doSomething());
}

abstract initialize():void;

abstract doSomething():string;
}

class testChild extends testParent{
private x:string = '';

initialize():void{
this.x = 'someValue';
}

doSomething():string{
return this.x;
}
}


const y = new testChild();
但这感觉很hacky。

最佳答案

问题是您正在尝试访问 x在它被初始化之前。
即使您可能不知道,实际上您的构造函数是这样做的:

constructor() {
super();
this.x = 'someValue';
}
这意味着 doSomething()this.x 调用尚未被赋值。
如果完全省略构造函数,也会发生同样的事情
constructor() {
super(...arguments);
this.x = '';
}
例如,如果您在操场上进行调试,则可以检查是否发生了这种情况:
Playground
您必须另外打开控制台 (F12) 以启用被命中的断点
我认为最准确的解决方案是您已经提出的解决方案,基本上您的 parent 需要在调用 super() 之前初始化该属性。

关于typescript - 从基类调用方法时,父类中尚未初始化的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64477551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com