関数を受け取る関数があって それに渡す関数は特定のプロパティを持つオブジェクト返す必要がある場合

const fn = () => {
const fn1 = () => {}
const fn2 = () => {}
const value1 = 1
const value2 = 2
return { fn1, fn2, value1, value2 }
}

xxx(fn)

という感じ
クラス好きならオブジェクトは new で作ったインスタンスにすればいい

const Class = class {
fn1() {}
fn2() {}
value1 = 1
value2 = 2
}

xxx(() => new Class())

そのまま Class を渡しても new で呼び出してくれないので関数でラップしてる
オブジェクトのプロパティが関数の場合に メソッドのコンテキストで呼び出される保証がないなら this を bind するため代入形式にする

const Class = class {
fn1 = () => {}
fn2 = () => {}
value1 = 1
value2 = 2
}

xxx(() => new Class())



逆にクラスを受け取る関数の場合

const Class = class {
fn1() {}
value1 = 1
}

yyy(Class)

が通常形
関数にしたければ

const fn = () => {
const fn1 = () => {}
const value1 = 1
return { fn1, value1 }
}

const Class = function() {
return fn()
}

yyy(Class)

通常の関数はすべてアロー関数にしたいので fn はアロー関数
ただクラスとして扱うためには prototype が必要なので function で作った関数でラップする

独立したオブジェクトになるので instanceof が中で使われると正しく判定できない
instanceof に対応させる必要があるなら prototype チェーンをつなぐ

const fn = () => {
const fn1 = () => {}
const value1 = 1
return { fn1, value1 }
}

const Class = function() {
const ret = fn()
ret.__proto__ = Class.prototype
return ret
}

yyy(Class)