假设我在 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`
或者,您可以使用forEachBergi 提到的第二个参数。