我正在使用 Typescript 開發一個專案,它有兩個這樣的類:
class A{
//some attributes
function_to_pass(){
//Do something
this.someFunction();
//Make changes in object A
}
protected someFunction(){
//Do some stuff
}
}
class B{
private readonly _functionProvided: () => void;
constructor(functionProvided: () => void){
this._functionPassed = functionProvided;
}
private myFunction(){
//Do some stuff
this._functionProvided();
}
}
我希望B類的物件呼叫A類物件中的“function_to_pass”方法,所以我將函式作為建構式中的引數傳遞,然后在這個物件b中呼叫“myFunction”。像這樣
objectA = new A();
objectB = new B(objectA.function_to_pass)
objectB.myFunction()
但是,我收到以下錯誤:
TypeError: this.someFunction is not a function
我想objectB不知道objectA,所以objectB不能操作objectA。
無論如何我可以做到這一點嗎?
uj5u.com熱心網友回復:
我看到代碼有兩個問題,第一個我認為是一個錯字:class B建構式沒有初始化實體資料,_functionProvided. (參見修復 #1)
第二個問題是真正的問題,與function_to_pass. 為了this在運行時定義它,函式必須系結到它的實體。參見(修復 #2)。
class A{
//some attributes
function_to_pass(){
//Do something
this.someFunction();
//Make changes in object A
}
protected someFunction(){
//Do some stuff
}
}
class B{
private readonly _functionProvided: () => void;
constructor(functionProvided: () => void){
// FIX #1, no such thing as _functionPassed
// WAS: this._functionPassed = functionProvided;
this._functionProvided = functionProvided;
}
private myFunction(){
//Do some stuff
this._functionProvided();
}
}
let objectA = new A();
// FIX #2: bind the receiver of function_to_pass
// WAS: objectB = new B(objectA.function_to_pass)
let objectB = new B(objectA.function_to_pass.bind(objectA));
objectB.myFunction()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/452147.html
標籤:javascript 打字稿 功能 参数 类型错误
