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
相关产品推荐
相关产品推荐

