3 回答

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
通過這樣做:
return this.baz(this.bar)
你只是傳遞一個(gè)函數(shù)沒有指定什么this它this是指(無上下文)。所以最終,當(dāng)你進(jìn)入baz(f)方法時(shí),你得到一個(gè)函數(shù)作為參數(shù),而不是類的方法A。所以它this是未定義的。要修復(fù)它,您有兩個(gè)選擇,第一個(gè)是更改foo()方法:
foo() {
return this.baz(this.bar.bind(this))
}
第二個(gè)是改變baz(f)方法:
baz(f){
return f.call(this);
}
這兩種解決方案都適用于這種情況。希望能幫助到你

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
它從未被定義。您在沒有上下文的情況下調(diào)用函數(shù) - 所以沒有“this”
this.apply(f) 將它綁定到對象

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
你也可以使用箭頭函數(shù)來解決這個(gè)問題。
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())
添加回答
舉報(bào)