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

TypeScript中如何通过类方法修改类字段值?

解决方案

问题原因

原代码中cancel.click是普通函数,调用时this指向的是cancel对象而非foo类的实例,因此修改的是cancel对象的show属性(新增属性),而非foo实例的show,导致输出不符合预期。

方案一:使用箭头函数定义click

箭头函数不会绑定自身的this,会继承外层作用域(即foo实例)的this,直接就能访问实例的show属性:

class foo {
  data = {};
  show = true;
  cancel = {
    click: (data?: any) => {
      console.log("click cancel", data);
      this.show = false;
    },
  };
}

let myfoo = new foo();
console.log(myfoo.show);
myfoo.cancel.click();
console.log(myfoo.show);

运行后输出:

true
click cancel undefined
false

方案二:在构造函数中绑定this

如果需要保留普通函数形式,可在构造函数里通过bind将click的this绑定到foo实例:

class foo {
  data = {};
  show = true;
  cancel = {
    click: function(data?: any) {
      console.log("click cancel", data);
      this.show = false;
    },
  };

  constructor() {
    this.cancel.click = this.cancel.click.bind(this);
  }
}

let myfoo = new foo();
console.log(myfoo.show);
myfoo.cancel.click();
console.log(myfoo.show);

两种方案都无需传入myfoo实例,且每个foo实例的cancel.click都会独立修改自身的show属性,可直接复用在多个弹窗组件中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:30:53