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);
我想将一个类方法存储在一个变量中,然后调用它。我怎样才能让这个例子起作用呢?如果我只将"greeter“存储在"a”中,然后调用greet,它就可以工作,但我不想这样做。我正在typescript playground上试用
发布于 2018-07-25 06:37:44
TL;DR
let a = greeter.greet.bind(greeter);
实际解释
这实际上与TypeScript没有任何特别的关系,但与JavaScript和this
的工作原理有关。
当您将greeter.greet()
分配给a
时,您实际所做的是将Greeter
的类方法greet()
分配给a
,而不是您命名为greeter
的Greeter
类实例的greet()
方法。因此,通过将greeter
分配给Greeter#greet()
函数,您将greeter
的greet()
方法分配给a
。
要进一步阅读,请阅读:
具体地说,“
https://stackoverflow.com/questions/51508344
复制相似问题