问题示例如下:
正确:
错误:
希望的结果:
错误原因我知道因为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() //这里
13 回答12.7k 阅读
2 回答4.9k 阅读✓ 已解决
7 回答1.8k 阅读
3 回答2.1k 阅读✓ 已解决
8 回答2.2k 阅读
5 回答645 阅读
3 回答1k 阅读✓ 已解决
double=num.double.bind(num)