假设我在TypeScript中有一个lambda:

 myArray.forEach(o => o.x = this.x);
this的值变为window而不是调用对象。我真正想做的是:
 myArray.forEach(o => { o.x = this.x; }.bind(this));

但是我不认为这是TypeScript中的选项。如何在TypeScript Lambda主体中覆盖this

最佳答案

即使没有lambda,也只是仅供引用,每个中的默认thiswindow例如。 :

[1].forEach( function ( o ) { console.log( this ) }); // window

要使用bind修复此问题,您需要使用function而不是lambda(这在词法上限制了this的含义)。
var foo = {};
[1].forEach( function ( o ) { console.log( this ) }.bind( foo ) ); // object `foo`

或者,您可以使用Bergi提到的forEach的第二个参数。

07-24 09:47
查看更多