慕妹3146593
2021-12-02 15:10:48
所以我有一堂課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 回答

小唯快跑啊
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);
}
這兩種解決方案都適用于這種情況。希望能幫助到你

慕桂英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
提交
取消