在 Javascript 中传递一个使用其他函数作为参数的函数
Pass a function that uses other functions as parameter in Javascript
我正在用 Typescript 开发一个项目,它有两个 class 是这样的:
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();
}
}
我想让 class B 的对象调用 class 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。
有什么办法可以做到吗?
我看到代码有两个问题,第一个我认为是拼写错误: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()
我正在用 Typescript 开发一个项目,它有两个 class 是这样的:
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();
}
}
我想让 class B 的对象调用 class 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。
有什么办法可以做到吗?
我看到代码有两个问题,第一个我认为是拼写错误: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()