问题示例如下:
正确:
错误:
希望的结果:
错误原因我知道因为double()是在外部调用的,this指向了外部而不是num实例对象内,怎样才能让错误示例中的double能够拿到正确的this,我希望通过这种写法实现
问题示例如下:
正确:
错误:
希望的结果:
错误原因我知道因为double()是在外部调用的,this指向了外部而不是num实例对象内,怎样才能让错误示例中的double能够拿到正确的this,我希望通过这种写法实现
math.double() 时,使用显式绑定规则,即 this 是 math
const double = num.double;
此时 double 就是一个函数,所以 double() 时,使用默认绑定规则,
即 this 是全局作用域,全局作用域内没有 a,所以报错。
使用硬绑定指明绑定的 this,就可以解决:
double.call(num)()
double.apply(num)()
double.bind(num)()
class Math {
constructor(initNum) {
this.a = initNum
}
double() {
console.log(this.a + this.a)
}
}
const math = new Math(100)
const double = math.double() //这里
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
2 回答4.2k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
double=num.double.bind(num)