◆ 最近は実行速度速いし prototype 使わず毎回メソッド込みのオブジェクト作っても変わらなそう
◆ と思ったけど差は大きい
◆ 大量にインスタンス作るなら prototype 使ったほうが良い

nodejs だとまだ ES Modules は実験的でフラグ必要なので require を使ってます
require だとモジュールのインスタンスを作るときにこういう書き方をすることがあります

require("foo")({
option: true
})

1 回しか使わないようなものだと最初に変数に入れておく必要もないので require してすぐ呼び出すというふうに簡単に書けます
これは require で得られるものが通常の関数だからであってクラスのコンストラクタの場合はそうは行きません
new を使わないとうまく動かないのですが new を使うと

new (require("foo"))({
option: true
})

になります
require("foo") にカッコが必要です
ないと require という関数に対して new が効いてしまいます

これがめんどうなのと Python を書いていると new はないのですが特に困らないので new は使わなくてもいいかなと思い始めました
ライブラリの中でも prototype を通さず 毎回オブジェクトを作って返している作りなものも少なからず見かけますし

ただ気になるのはパフォーマンスです
prototype の仕組みは 毎回同じ関数を作ってオブジェクトを返すというのだと無駄が多くて 処理も増えるしメモリも消費するから メソッド部分は全インスタンスでひとつだけにして無駄をなくしているものです
なので それをなくすとパフォーマンスは落ちそうです
ただ 最近の実行環境は高速なものばかりなのであまり気にしなくて良い気もします

そういうわけで試してみました
この HTML を開きます

<script>
class A {
m11(){}
m12(){}
m13(){}
m14(){}
m15(){}
m16(){}
m17(){}
m18(){}
m19(){}
m20(){}
m21(){}
m22(){}
m23(){}
m24(){}
m25(){}
m26(){}
m27(){}
m28(){}
m29(){}
m30(){}
}

function B(){
return {
m11(){},
m12(){},
m13(){},
m14(){},
m15(){},
m16(){},
m17(){},
m18(){},
m19(){},
m20(){},
m21(){},
m22(){},
m23(){},
m24(){},
m25(){},
m26(){},
m27(){},
m28(){},
m29(){},
m30(){},
}
}

function caseA(){
console.time("A")
for(let i=0;i<10000;i++){
const instance = new A()
instance.m11()
instance.m21()
}
console.timeEnd("A")
}

function caseB(){
console.time("B")
for(let i=0;i<10000;i++){
const instance = B()
instance.m11()
instance.m21()
}
console.timeEnd("B")
}

caseA()
caseB()
caseA()
caseB()
caseA()
caseB()
caseA()
caseB()
</script>

A: 1.709228515625ms
B: 20.73193359375ms
A: 2.60302734375ms
B: 3.929931640625ms
A: 0.010009765625ms
B: 4.458984375ms
A: 0.01220703125ms
B: 3.598876953125ms

A は 3 回目から最適化されたようでかなり速くなりました
何度かやっても 2 回目までは遅めでした
B は 2 回目から速いですが 最適化後の A と比べると 100 倍以上に遅いです

それでも 10000 回で 3ms とかなのでほとんどの場合はどっちでも良さそうです
実際インスタンスの数は 1 つだけや 2, 3 程度だけしか作らないこともありますし
10000 個以上作るケースは珍しいです
さらにそれを一度に作るなんてことはめったにないです

もし 何十万や何百万も作ることがあれば全体で 1 秒近くかかる場合も出てくるので prototype を使ったほうが良さそうです
それに new を使わない方法 = prototype 使わない としましたが 関数の通常呼び出しでも 内部から new 付きで呼び出したり 返すオブジェクトの __proto__ を設定するなどすれば new なしの呼び出しでもprototype は使えます