所以我有一堂课class A { test() { return 1; } foo() { return this.baz(this.bar) } bar() { return this.baz(this.test); } baz(f){ return f(); }}当我调用方法时 foovar a = new A();a.foo();我得到Uncaught TypeError: Cannot read property 'baz' of undefined at bar (<anonymous>:9:15) at A.baz (<anonymous>:12:10) at A.foo (<anonymous>:6:15) at <anonymous>:1:3this在调用方法 f() 后,它是如何变得未定义的,我该如何解决这个问题?
3 回答
![?](http://img1.sycdn.imooc.com/533e4cf4000151f602000200-100-100.jpg)
小唯快跑啊
TA贡献1863条经验 获得超2个赞
通过这样做:
return this.baz(this.bar)
你只是传递一个函数没有指定什么this它this是指(无上下文)。所以最终,当你进入baz(f)方法时,你得到一个函数作为参数,而不是类的方法A。所以它this是未定义的。要修复它,您有两个选择,第一个是更改foo()方法:
foo() {
return this.baz(this.bar.bind(this))
}
第二个是改变baz(f)方法:
baz(f){
return f.call(this);
}
这两种解决方案都适用于这种情况。希望能帮助到你
![?](http://img1.sycdn.imooc.com/545865890001495702200220-100-100.jpg)
慕桂英3389331
TA贡献2036条经验 获得超8个赞
你也可以使用箭头函数来解决这个问题。
class A {
test =()=> {
return 1;
}
foo=()=> {
return this.baz(this.bar)
}
bar=()=> {
return this.baz(this.test);
}
baz=(f)=>{
return f();
}
}
const a = new A()
console.log(a.foo())
添加回答
举报
0/150
提交
取消