typescript では、 javascript では許可されない記述方法がいくつか可能です。その中には、例えば以下に示すような arrow 関数を用いたメソッド定義があります。

class Foo {
  sayThis = () => console.log(this);
}

const foo = new Foo();
const sayThisFunction = foo.sayThis;
sayThisFunction();  // => Foo { sayThis: [Function] }

このように arrow としてクラスに定義された関数は、メソッドのような振る舞いをしていて、一方、 this はどのように呼び出しても、そのメソッドが所属しているオブジェクトに対して解決されているような振る舞いです。

これは、一見、どのようなコードに最終的に落ちているのかが、あまり自明ではないな、と思いました。

質問

  • 上記のように、アロー関数でメソッドを typescript にて定義したとき、それと同等のことを実現する javascript コードはどのようなものになりますか?