You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中类的公共变量无法更新问题求助

问题分析与解决方案

这个问题我之前也踩过坑!核心原因是你定义的l3函数内部的this指向根本不是HomePage的实例,所以哪怕resultado是public权限,也没法给它赋值。

先拆解你的代码结构:

class HomePage {
  public resultado: any;

  l1() { 
    this.l2(); 
  } 

  l2() { 
    l3(); 
    function l3(){ 
      this.resultado = "TEST"; 
    } 
  }
}

当你在l2里直接调用l3()时,这个普通函数内部的this在非严格模式下会指向全局对象(比如浏览器里的window),严格模式下则是undefined——完全和你的HomePage实例不沾边,自然没法修改resultado的值。

下面给你几种靠谱的解决办法:

方法1:用箭头函数定义l3

箭头函数不会绑定自己的this,它会继承外层作用域的this(也就是l2里的this,也就是HomePage的实例),这是最简洁的方案:

class HomePage {
  public resultado: any;

  l1() { 
    this.l2(); 
  } 

  l2() { 
    const l3 = () => { 
      this.resultado = "TEST"; 
    }
    l3(); 
  }
}

方法2:提前保存this的引用

在l2里把当前实例的this存到一个变量里(比如that或者self),然后在l3里用这个变量访问实例:

class HomePage {
  public resultado: any;

  l1() { 
    this.l2(); 
  } 

  l2() { 
    const that = this; // 保存实例的this引用
    function l3(){ 
      that.resultado = "TEST"; 
    } 
    l3();
  }
}

方法3:用bind绑定this到l3

调用l3的时候,通过bind把实例的this绑定进去,强制让l3内部的this指向实例:

class HomePage {
  public resultado: any;

  l1() { 
    this.l2(); 
  } 

  l2() { 
    function l3(){ 
      this.resultado = "TEST"; 
    } 
    l3.bind(this)(); // 绑定this后调用
  }
}

方法4:把l3改成类的成员方法

如果l3的逻辑需要在其他地方复用,直接把它定义成类的公共方法,这样调用时this天然指向实例:

class HomePage {
  public resultado: any;

  l1() { 
    this.l2(); 
  } 

  l2() { 
    this.l3(); 
  }

  l3() {
    this.resultado = "TEST";
  }
}

以上几种方法都能解决你的问题,其中箭头函数的方式最推荐,代码简洁还不容易出错。

内容的提问来源于stack exchange,提问作者1x2x3x4x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:13:44