gpt4 book ai didi

javascript - 将两个 Backbone 集合扩展到另一个 Backbone 集合

转载 作者:行者123 更新时间:2023-11-30 17:06:30 24 4
gpt4 key购买 nike

我有

CollectionA = Backbone.collection.extend({ a : function() {} });
CollectionB = Backbone.collection.extend({ b : function() {} });

如何将 CollectionC 定义为一个集合,其中包含 CollectionACollectionB 的所有函数以及它自己的函数 c?

最佳答案

您可以借助 _.extendCollectionACollectionB 的原型(prototype)混合到 CollectionC 的原型(prototype)中:

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/

如果你想防止某些方法的隐藏,你可以从混合中选择/省略它们:

_.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'); }

http://jsfiddle.net/nikoshr/yjb3g3e3/3/

关于javascript - 将两个 Backbone 集合扩展到另一个 Backbone 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27919585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com