私はAngular 2プロジェクトにTypescriptを使用しています。私は、ラブマの式と関数の中でキーワードthis
を使用すると、this
は異なるものを参照することに気付きました。lambdasとtypescriptの関数のキーワードthisを使用するとどうなります
たとえば、次のような角型コンポーネントがあるとします。
export class MyComponet {
isActive = true;
names = [ "john", "jeff", "jared" ];
doSomethingWithLambda() {
names.forEach((value, index) => {
if(this.isActive) { //this.isActive refers to MyComponent.isActive
//do something...
}
});
}
doSomethingWithFunction() {
names.forEach(function(value, index) {
if(this.isActive) { //this.isActive is undefined, since this refers to the function
//do something
}
});
}
doSomethingWithFunction2() {
let isActive = this.isActive;
names.forEach(function(value, index) {
if(isActive) { //if we change isActive will this also change MyComponent.isActive?
//do something
}
});
}
}
ここで実際に何が起きているのですか(話すのはどうでしょう)? this
の裏にある魔法は、「正しく」外部クラスのフィールドを参照できるようにするものですか?私は関数内のthis
が関数自体を参照することを理解しています。
また、ローカル変数にMyComponent.isActive
を参照するdoSomethingWithFunction2
メソッドがあります。そのローカル変数を変更した場合、それは参照変数を変更するようなものでしょうか? (関係なく、整数/数またはJSON {}のような「オブジェクト」のような「プリミティブ」という)