我无法通过相同打字稿方法传递的回调函数的javascript调用访问打字稿全局变量。
这是stackblitz中的示例代码。
https://stackblitz.com/edit/angular-quhktp
在上述示例中,incr变量在组件文件中声明。当我们直接使用它时,可以通过clickthisfunction方法进行访问。但是,如果将相同的方法传递给javascript进行回调。调用了回调函数,但此方法无法访问this.incr变量。
答案 0 :(得分:0)
一个小错误。通过时需要调用它。
这应该可以解决问题:
clickthisargwithfunction() {
withargumentcallwithfunctionasargument(this.clickthisfunction());
}
答案 1 :(得分:0)
在javascript函数中,this
指的是调用该函数的对象。
因此,如果您调用this.clickthisfunction()
,则this.incr
可以正常工作,但是如果您将this.clickthisfunction
重新分配给其他变量,则该函数中的this
不会是您期望的。该MDN page具有有关this
的工作方式的更多信息。
要解决此问题,有几个选项:
绑定:
您可以通过在函数上调用this
来更改函数中.bind
的值。
您可以在constructor
中添加以下行来完成此操作:
this.clickthisfunction = this.clickthisfunction.bind(this);
您也可以在将其传递给withargumentcallwithfunctionasargument
之前将其绑定,
但是绑定不是免费的,因此通常只绑定一次。
箭头功能:
Arrow functions处理this
的方式不同–他们从外部范围捕获它,而不是使用调用该函数的对象。
通过以此替换函数声明
clickthisfunction = () => {
它将从构造对象时捕获this
的值。
(如果您对它如何获得此值感兴趣,请查看转译的代码,
这更有意义)。
其中任何一个都应解决this
未被定义的问题,而您使用的大部分内容取决于样式。唯一的区别是,第一种方法将在原型上保留功能,而第二种方法仅在实例上保留功能。除非您做一些奇怪的事情,否则那可能不会影响任何事情。