Object.setPrototypeOf を回避する
JavaScript エンジンでは [[Prototype]] にアクセスするのにインラインキャッシュを使ってパフォーマンス改善をしている。つまり可能な限り Object.setPrototypeOf を回避したほうが良い(少なくとも何度も実行される函数の中では辞めたほうが良い)。オブジェクトを作る際に工夫をすることで回避できることがある。
通常 Object.create を使えば回避できる。第二引数が PropertyDescriptor になっているため [[Prototype]] だけを変更の対象にしたい場合は少し面倒。代わりにオブジェクトリテラルの __proto__ を使うという手はある。
Reflect.construct の第三引数には NewTarget を指定することが出来る。任意のコンストラクタを実行しつつもそのオブジェクトが持つ [[Prototype]] は別のものにしたいというかなり特殊な場合で役に立つ。
ECMAScript や Web Standards の仕様に沿った実装が必要なときに有効。つまり polyfill とか。普通使わない。