我有
CollectionA = Backbone.collection.extend({ a : function() {} });
CollectionB = Backbone.collection.extend({ b : function() {} });
如何将CollectionC
定义为包含CollectionA
和CollectionB
的所有函数以及自己的函数c
的集合?
答案 0 :(得分:1)
_.extend(CollectionC,CollectionB,CollectionA)
答案 1 :(得分:1)
您可以在_.extend
的帮助下将CollectionA
和CollectionB
的原型混合到CollectionC
的原型中:
var A = Backbone.Collection.extend({
a: function() { console.log('a'); },
croak: function() { console.log('croak a'); }
});
var B = Backbone.Collection.extend({
b: function() { console.log('b'); },
croak: function() { console.log('croak b'); }
});
var C = Backbone.Collection.extend({
c: function() { console.log('c'); },
croak: function() { console.log('croak c'); }
});
_.extend(C.prototype, A.prototype, B.prototype);
var c = new C();
c.a(); // outputs a
c.b(); // outputs b
c.c(); // outputs c
请注意,如果某个方法被多次定义,则会被最后一个混合的方式遮蔽:c.croak();
将输出 b
演示http://jsfiddle.net/nikoshr/yjb3g3e3/
如果你想阻止某些方法的阴影,你可以从mixin中选择/省略它们:
_.extend(C.prototype,
_.omit(A.prototype, 'croak'),
_.omit(B.prototype, 'croak')
);
c.croak(); // outputs c
http://jsfiddle.net/nikoshr/yjb3g3e3/1/
或之后在C上设置该方法:
var C = Backbone.Collection.extend({
c: function() { console.log('c'); }
});
_.extend(C.prototype, A.prototype, B.prototype);
C.prototype.croak = function() { console.log('croak c'); }