generated at
Dynamic Dispatch
実行時にオブジェクトの型を調べ、対応するメソッドを呼び出す
正確な型は実行時に初めてわかる
関数のインライン化ができない
動的ディスパッチには
シングルディスパッチ
の2つがあり、多重ディスパッチの中でも関与するオブジェクトが2つの時「ダブルディスパッチ」と言ったりする

イメージ
example
func(f: Piyo|Hoge) { if (f instanceof Piyo) Piyo.f() if (f instanceof Hoge) Hoge.f() }


何が嬉しいか
Interfaceによるコードの再利用と分離ができる
以下のようなコードを書けば、関数 f
A B どちらのインスタンスに対しても使える
ts
interface I { m: () => number; } class A implements I {...} // (省略しているが)中でmを定義 class B implements I {...} // (省略しているが)中でmを定義 const f = (c: I) => { console.log(c.m()); // A, Bどちらのm()を呼ぶかは実行時に決まる } const a = new A(); f(a); const b = new B(); f(b);
別のクラスから生成された a , b に対して、関数 f を再利用できている
この時、 A , B どちらの m() を呼ぶかは、実行時にvtableを参照して決めるので、多少のオーバーヘッドがかかる



参考