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)