在Backbone.js中,如何让Model超类默认值作为子类的默认值?

时间:2011-06-28 11:43:08

标签: javascript backbone.js prototypal-inheritance

我有一个定义了一些默认值的类,以及一个定义一些默认值的子类。但是当我创建子类的实例时,它只查看本地默认值,并且不会将其默认值与父类的默认值合并。有没有简单的方法可以在没有明确地将本地默认值与每个子类的initialize函数中的父默认值合并的情况下执行此操作?

var Inventory = Backbone.Model.extend({
    defaults: {
        cat: 3,
        dog: 5
    }
});

var ExtendedInventory = Inventory.extend({
    defaults: {
        rabbit: 25
    }
});

var ei = new ExtendedInventory({});
console.log(ei.attributes);

输出:

{rabbit: 25}

不是我想要的:

{cat: 3, dog: 5, rabbit: 25}

1 个答案:

答案 0 :(得分:7)

你不能这样做。您必须在子类

之后执行此操作
_.extend(ExtendedInventory.prototype.defaults, {rabbit: 25});

在模型定义之后加上它。