プロトタイプ チェーンを設定して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へのリンク