js中 关于class的一个问题

问题示例如下:
正确:
image.png
错误:
image.png

希望的结果:
错误原因我知道因为double()是在外部调用的,this指向了外部而不是num实例对象内,怎样才能让错误示例中的double能够拿到正确的this,我希望通过这种写法实现

阅读 2.7k
5 个回答

double=num.double.bind(num)

// 写法一(ES6)
double.bind(num)();

// 写法二
double.apply(num);

this指向问题啊

math.double() 时,使用显式绑定规则,即 this 是 math
const double = num.double;
此时 double 就是一个函数,所以 double() 时,使用默认绑定规则,
即 this 是全局作用域,全局作用域内没有 a,所以报错。

使用硬绑定指明绑定的 this,就可以解决:
double.call(num)()
double.apply(num)()
double.bind(num)()

参考链接: https://juejin.im/post/5d8d82...

class Math {
    constructor(initNum) {
        this.a = initNum
    }
    double() {
        console.log(this.a + this.a)
    }
}


const math = new Math(100)
const double = math.double() //这里
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题