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

JS间接调用类实例方法时如何让this指向原所属对象?

问题根本原因

class 内部默认运行在严格模式下,this的指向由调用方式决定:

  • test1 中通过b.whatIsThis()调用,方法的执行上下文绑定到实例b,所以打印实例对象
  • test2 中把方法单独赋值给method变量后直接调用,属于无上下文的独立调用,严格模式下this默认指向undefined
可用实现方案
  • 方案1:赋值时用bind永久绑定this到实例
// test 2 部分修改为
var method = b.whatIsThis.bind(b);
method(); // 打印实例对象

该方案只需绑定一次,后续多次调用method都不需要额外处理。

  • 方案2:类定义时用箭头函数声明方法,自动绑定实例this
class Ball{
    // 改为箭头函数,this继承自实例初始化时的上下文
    whatIsThis = () => { 
        console.log(this);
    }
}
var b = new Ball();
// test 2 无需额外修改
var method = b.whatIsThis;
method(); // 打印实例对象

该方案适合所有该类的方法调用都需要绑定到实例的场景。

  • 方案3:调用时用call/apply临时指定this指向
// test 2 部分修改为
var method = b.whatIsThis;
method.call(b); // 或者 method.apply(b),都会打印实例对象

该方案适合仅需单次临时指定this的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:57:00