私はこれを質問として提起したい。これ答えたいのですが、答えられないようです。申し訳ありません。
サブクラスのデフォルトを拡張すると、スーパークラスに反映されます。これでは目的が達成されないようで、探している構造を得るためには、サブクラスでスーパークラスのデフォルトを明示的にリストする方が適切です。
var Inventory = Backbone.Model.extend({
defaults: {
cat: 3,
dog: 5
}
});
var ExtendedInventory = Inventory.extend({
});
_.extend(ExtendedInventory.prototype.defaults, {rabbit: 25});
var i = new Inventory();
var ei = new ExtendedInventory();
console.log(i.attributes);
console.log(ei.attributes);
出力は次のようになります:
{cat: 3, dog: 5, rabbit: 25}
{cat: 3, dog: 5, rabbit: 25}
私が(そしておそらく、オプ) 欲しい:
{cat: 3, dog: 5}
{cat: 3, dog: 5, rabbit: 25}
ベストアンサー1
問題は、参照をオーバーライドしていないため、Inventory.prototype.defaults
と が同じ参照を持つことです。Extended.prototype.defaults
つまり、これを 2 つの方法で実行できます。おそらくもっと多くの方法があると思いますが、私が見つけたのは次の 2 つだけです。
編集:最初の例は間違っています (コメントを参照)。2 番目の例を参照してください。
var ExtendedInventory = Inventory.extend({
defaults: {
rabit:25
}
});
_.extend(ExtendedInventory.prototype.defaults, Inventory.prototype.defaults);
または
var ExtendedInventory = Inventory.extend({
defaults: _.extend({},Inventory.prototype.defaults,
{rabit:25}
)
});
最初のほうがきれいに見えると思います。