1


プロトタイプ チェーンを設定してBackbone オブジェクトを拡張する、非標準的または異常な方法に出会いました。

シナリオ:
- 子クラスは 2 つのスーパー クラスから継承します
- 2 つのスーパー クラスは関連していません
- したがって、SuperB = SuperA.extend は適用されません

例: ChildC スコープから SuperA.prototype.initialize.apply は期待どおりに動作します。

しかし、どのように ChildC を拡張して、SuperA クラスの methodA を ChildC スコープで
使用できるようにするには、prototype.initialize.apply のアナロジーを使用するのでしょうか?

SuperA = Backbone.Model
  defaults:
    flagA: false
  initialize: ->
    this.set "flagA", true
    console.log "SuperA::initialize()"
  methodA: ->
    console.log "methodA"

SuperB = Backbone.Model.extend
  defaults:
    flagB: false
  initialize: ->
    this.set "flagB", true  
    console.log "SuperB::initialize()"
  methodB: ->
    console.log "methodB"


ChildC = Backbone.Model.extend
  defaults:
    flagC: false
  initialize: ->
    SuperA.prototype.initialize.apply this, arguments 
    SuperB.prototype.initialize.apply this, arguments
    this.set "flagC", true
    console.log "ChildC::initialize()"
  methodC: ->
    console.log "methodC"


instanceA = new SuperA()
instanceA.methodA()

instanceB = new SuperB()
instanceB.methodB()

instanceC = new ChildC()
instanceC.methodC()

console.log instanceC.get("flagA")
console.log instanceC.get("flagB")
console.log instanceC.get("flagC")

instanceC.methodC()

Gistへの
リンクJS Binへのリンク

4

0 に答える 0