私は次のパターンが好きになりました(この場合、Coffeescriptの方が読みやすくなります):
Parent = (proto)->
self = Object.create proto
public1 = ->
console.log "in public1 with self: ", self
console.log "in public1 with name: ", self.name
self.public1 = public1
self
Child = (proto)->
self = new Parent proto
private1 = ->
console.log "in private1 with self: ", self
console.log "in private1 with name: ", self.name
self.public1()
public2 = ->
console.log "in public2 with self: ", self
console.log "in public2 with name: ", self.name
private1()
self.public2 = public2
self
GrandChild = (proto)->
self = new Child proto
public3 = ->
console.log "in public3 with self", self
console.log "in public3 with name: ", self.name
self.public2()
self.public3 = public3
self
felix = new GrandChild name: "Felix"
felix.public2()
多重継承のその素朴な試みは機能し、「自己」の単純で明らかに便利な使用を可能にします...あなたが私のように他のoop言語から来ているときは賢いです。
落とし穴:すべてのGrandChildオブジェクトは、新しい親オブジェクトだけでなく新しい子オブジェクトも作成するため、多くのGrandChildオブジェクトが作成された場合にメモリ消費量が増加します。
GrandChildのプロトタイプをChildとParentのメソッドで拡張すると、私が理解している限り(そして多くのスペースを節約して)、GrandChildオブジェクト内のメソッドを参照するだけですが、上下に読んでも、自分のやり方で自分自身にアクセスする方法が見つかりません。上のソリューションで。
Coffeescript自体が、JSのプロトタイプの継承に加えてクラスベースの継承システムを提供していることを私は知っています。他のライブラリも同様にソリューションを提供します。ユースケースに応じて適切なソリューションを選択するために何が起こっているのかを簡単に理解したいと思います。
たとえば、Childのprivate1とpublic2をプロトタイプに入れて、これらの関数がコピーされるのではなく参照されるようにするにはどうすればよいでしょうか。
その時点で誰かが私を教えてもらえますか?