◆ 継承したいクラスのインスタンスをそれぞれ作って Proxy を通してアクセス

前記事の Proxy の動きを見て 多重継承って内部でそれぞれのクラスのインスタンスを作って優先度順に Proxy でアクセスすればできるんじゃないのと思いつきました

多重継承したいと言っても 基本はそれぞれのクラスの機能を 1 つのインスタンスで扱いたいというだけです
クラス A とクラス B を継承したクラス C があったとして クラス C では A と B の機能を使いたいだけで A と B の機能が相互に複雑に連携する必要はなく独立していて良いものです
なので実体は独立したインスタンスで Proxy オブジェクトを通してアクセスできるようにすれば良さそうな気がします

簡単なものをつくってみました

class A {
aGet() {
return this.avalue
}
aUp() {
this.avalue++
}
avalue = 1
}

class B {
bGet() {
return this.bvalue
}
bUp() {
this.bvalue++
}
bvalue = 20
}

クラス A と B を作ります
両方を継承する C の中身はこういう感じです

class C {
constructor() {
const a = new A()
const b = new B()

return new Proxy({}, {
get(_, prop) {
if (prop in a) return a[prop]
return b[prop]
},
set(_, prop, value) {
if (prop in a) a[prop] = value
else if (prop in b) b[prop] = value
else a[prop] = value
return true
}
})
}
}

使ってみます

const c = new C()

c.aGet()
// 1
c.aUp()
c.aUp()
c.aGet()
// 3

c.bGet()
// 20
c.bUp()
c.bGet()
// 21

A クラスの機能も B クラスの機能も問題なく使えていますね