在Angular 12中作業,當我試圖在另一個方法中呼叫一個方法時遇到了一個錯誤。 以下是我正在處理的問題的抽象描述(在TypeScript中,我在Angular中也是如此
。export class SomeClass {
測驗變數
onTaskCompleted(results) {
if (! results) {
return;
} else {
//下面這行是有效的。
console.log(results)。
//下面這行拋出了一個錯誤。
this.drawSomething(results)。
//事實上,任何對這個函式之外的東西的參考都會引發一個錯誤。
this.testvariable = result
}
}
//關于OnTaskCompleted的獨特之處在于,它也被一個第三方庫用作回呼處理程式,該庫正在拋出錯誤。
//它被另一個函式這樣呼叫。 它在onTaskCompleted中產生了正確的結果,但當我做類似上述的事情時,它就中斷了。
this.something.onResults(this.onResults)。
drawSomething(results){
if (! results) {
return;
} else {
//執行一些作業。
}
}
}
}
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
當我運行這個時,我得到一個TypeError。不能讀取未定義的屬性。 如果我把doSomethingElse函式包含在我的類中定義的任何其他函式中,我就沒有問題了,它可以按預期作業。 唯一值得注意的是,我遇到這個問題的函式doSomething()被一個外部庫用作回呼,這似乎是當我在doSomething函式中包含對doSomething "外部 "的任何參考時產生錯誤的原因。 如果您有任何想法,我們將不勝感激
。uj5u.com熱心網友回復:
我遇到這個問題的函式doSomething()是作為回呼使用的
你很可能像這樣傳遞函式:
library.externalFunction(this.doSomething)。這是個問題,因為
this引數被設定為呼叫者,也就是說,它將不再是類實體。如果doSomething()試圖訪問this上的一個屬性,它將是一個錯誤。一種正確的寫法是:
library. externalFunction(span class="hljs-params">param => this.doSomething(param) )。箭頭函式捕獲了
this,其行為更像是你所期望的行為。另外,我們可以在函式上明確系結
this:library.externalFunction(this. doSomething.bind(this) )。這里有不少解釋函式范圍的答案,例如:https://stackoverflow.com/a/20279485
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/307508.html
標籤:
