我正在寻找将类方法传递给函数的可能性,然后函数可以在该类的实例上执行该函数.像伪代码那样:(注意这是一个抽象的例子)
class Foo {
public somefunc() {
// do some
}
public anyfunc() {
// do any
}
}
function bar(obj: Foo ,func: "Foo.method") { // "that's what im looking for"
obj.func();
}
bar(new Foo(), Foo.somefunc); // do some
bar(new Foo(), Foo.anyfunc); // do any
Run Code Online (Sandbox Code Playgroud)
这样做有可能吗?
我知道我可以这样做:
class Foo {
static somefunc(fooObj: Foo) {
// do some
}
static anyfunc(fooObj: Foo) {
// do any
}
}
interface func {
(fooObj: Foo);
}
function bar(obj: Foo, fn: func) {
fn(obj); …
Run Code Online (Sandbox Code Playgroud) 在 Javascript 中,以下代码按预期工作:
$("#field").click(eventHandler);
function eventHander() {
invokeClassMethod();
// do other stuff
}
Run Code Online (Sandbox Code Playgroud)
我在 Typescript 中尝试了此操作,但收到错误,因为“this”的上下文似乎已更改为不属于我的类的内容。
$("#field").click(this.eventHandler);
eventHandler() {
this.invokeClassMethod();
// do other stuff
}
Run Code Online (Sandbox Code Playgroud)
给我一个错误,因为“invokeClassMethod”未定义。
我是 Typescript 的新手,有人可以告诉我出了什么问题以及如何修复它吗?
在我的 Typescript AngularJS 控制器中声明了以下构造函数。
static $inject: Array<string> = [
'$rootScope',
'BookingRepository'
];
constructor(
$rootScope: ng.IRootScopeService,
bookingRepository: soft.data.BookingRepository
) {
super();
this.$rootScope = $rootScope;
this.$rootScope.$on('accessController_onNavAccessSelected', this.accessController_onNavAccessSelected);
this.bookingRepository = bookingRepository;
}
Run Code Online (Sandbox Code Playgroud)
但是当 accessController_onNavAccessSelected 被调用时,当我引用“this”时,我得到了空值。我期待控制器的实例。
// Listening Events
accessController_onNavAccessSelected(event: ng.IAngularEvent, accessViewModel: soft.data.AccessViewModel): void {
console.log(this);
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?或者我如何获得我的控制器实例的引用?