如何为typescript中的变量指定方法?

如何为typescript中的变量指定方法?,typescript,Typescript,我想在变量中存储一个类方法,然后调用它。我怎样才能使这个例子起作用?如果我只将“greeter”存储在“a”中,然后打电话给greet,这是可行的,但我不想这样做。我正在试穿它TL;博士: class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return "Hello, " + th

我想在变量中存储一个类方法,然后调用它。我怎样才能使这个例子起作用?如果我只将“greeter”存储在“a”中,然后打电话给greet,这是可行的,但我不想这样做。我正在试穿它

TL;博士

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");

let button = document.createElement('button');
let a  = greeter.greet;
button.textContent = "Say Hello";
button.onclick = function() {
    alert(greeter.greet());//works
    alert(a());//doesn't work
}
document.body.appendChild(button);
实际解释

class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");

let button = document.createElement('button');
let a  = greeter.greet;
button.textContent = "Say Hello";
button.onclick = function() {
    alert(greeter.greet());//works
    alert(a());//doesn't work
}
document.body.appendChild(button);
这实际上与TypeScript没有任何关系,但与JavaScript以及它的工作方式有关

当您将
greeter.greet()
分配给
a
时,您实际做的是将
greeter
的类方法
greet()
分配给
a
,而不是将
greeter
类实例的
greet()
方法命名为
greeter
。因此,通过
bind()
-ing
greeter
greeter#greet()
函数,您可以将
greeter
greet()
方法分配给
a

进一步阅读:

  • ,特别是“绑定方法”部分


  • 我怎样才能自动完成这项工作?我有一个函数应该将方法作为参数,那么有没有“自动绑定”的方法呢?因为我有这样一个函数:函数takemethod(let方法),为什么不在调用
    takemethod
    时传递已经绑定到实例的函数呢?或者将实例作为第二个参数传递,并在函数内部绑定到它。所以这是不可能的?因为我想避免额外的争论。通常在javascript中,您可以只分配函数。比如,“a=console.log;a(“something”)”可以工作,所以我希望它在typescript中也可以工作。但我知道这和绑定有关,我会读到的。为了方便起见,我刚刚添加了几个对你有用的链接。