假设我在 TypeScript 中有一个 lambda:
myArray.forEach(o => o.x = this.x);
的值this
变成window
而不是调用对象。我真正想做的是:
myArray.forEach(o => { o.x = this.x; }.bind(this));
但我不认为这是 TypeScript 中的一个选项。如何this
在 TypeScript lambda 主体中覆盖?
假设我在 TypeScript 中有一个 lambda:
myArray.forEach(o => o.x = this.x);
的值this
变成window
而不是调用对象。我真正想做的是:
myArray.forEach(o => { o.x = this.x; }.bind(this));
但我不认为这是 TypeScript 中的一个选项。如何this
在 TypeScript lambda 主体中覆盖?
仅供参考,即使没有 lambda this
,每个的默认值是window
例如:
[1].forEach( function ( o ) { console.log( this ) }); // window
要解决这个问题,bind
您需要使用 afunction
而不是 lambda(它在词法上限定 的含义this
)。
var foo = {};
[1].forEach( function ( o ) { console.log( this ) }.bind( foo ) ); // object `foo`
或者,您可以使用forEach
Bergi 提到的第二个参数。