javascript - 在Typescript中将类方法作为参数传递

标签 javascript function parameters typescript

我正在寻找将类方法传递给函数的可能性,该函数然后可以在该类的实例上执行该函数。 类似于那个伪代码:(注意这是一个抽象的例子)

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

有没有可能做到这一点?

我知道我可以做类似的事情:

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);
}

bar(new Foo(), Foo.somefunc);  // do some
bar(new Foo(), Foo.anyfunc);  // do any

但这涉及我不想要的静态函数。

最佳答案

这不会在编译时检查函数是否来自 Foo,但会执行其余操作:

class Foo {
    public somefunc() {
        // do some
    }
    public anyfunc() {
        // do any
    }
}

function bar(obj: Foo ,func: () => void) {
    func.call(obj);
}

bar(new Foo(), Foo.prototype.somefunc);  // do some
bar(new Foo(), Foo.prototype.anyfunc);  // do any

关于javascript - 在Typescript中将类方法作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29822773/

相关文章:

c++ - 在参数列表中使用表达式的意外输出

java - 在 NetBeans 中使用参数运行 Gradle 应用程序

c# - 如何取消选择列表框中的单个项目

javascript - 电子邮件脚本主题设置

c++ - 包装的 lambda 表达式

javascript - For 循环不使用 JavaScript 函数的参数

C++ 传递函数的问题(数学不加起来)

c# - 在 JavaScript 中获取 C# 列表

JavaScript KeyCode 与 CharCode

c++ - 将模板化类型初始化为 "zero"