Javascript 我应该何时/为什么从BackboneJS模型/集合扩展函数返回?
我是BackboneJS新手,在上阅读了这篇文章,我想知道扩展函数何时/为什么应该返回模型/集合/什么Javascript 我应该何时/为什么从BackboneJS模型/集合扩展函数返回?,javascript,backbone.js,Javascript,Backbone.js,我是BackboneJS新手,在上阅读了这篇文章,我想知道扩展函数何时/为什么应该返回模型/集合/什么 var Hotel = Backbone.Model.extend({ defaults: { "availableRooms": ["a"], "rooms": [ { "name": "a", "size": 1200, "bed
var Hotel = Backbone.Model.extend({
defaults: {
"availableRooms": ["a"],
"rooms": [
{
"name": "a",
"size": 1200,
"bed": "queen"
},
{
"name": "b",
"size": 900,
"bed": "twin"
},
{
"name": "c",
"size": 1100,
"bed": "twin"
}
],
// how come this function does not return
getRooms: function() {
var rooms = $.extend(true, {}, this.get("rooms")),
newRooms = {};
// transform rooms from an array back into an object
_.each(rooms, function(room) {
newRooms[room.name] = {
"size": room.size,
"bed": room.bed
}
});
},
// but this one does
getRoomsByBed: function(bed) {
return _.where(this.getRooms(), { "bed": bed });
}
}
});
请善待我。我不是想撕碎别人的代码——我只是想了解主干网是如何工作的。:-)
感谢您可以考虑主干中使用的
extend
-函数作为面向对象世界的参考,在面向对象世界中,类通常被扩展以创建子类。在Javascript中,这些“类”必须存储在变量中(例如,在Java中声明类),以便应用程序可以使用它们
所以你可以看到:
var Dog = Mammal.extend({...});
var dog = new Dog();
作为一个版本
class Dog extends Mammal { ... }
Dog dog = new Dog();
因此主干扩展函数返回被扩展的“类”的“子类”。当然,Javascript离面向对象还差得远,所以不要从字面上理解它,但它的概念大致相同。主干网使用的是JS没有的“类”。在本例中,您正在执行规范。酒店是一个规范的模型。(inb4,是的-是的,我知道主干网不适合在模型中使用普通JS对象)谢谢-这很有意义。这就是原型遗传,对吗?但是为什么
getRooms
返回而getRoomsByBed
不返回呢?我在collection.fetch()
方面也有问题,我认为这应该是var c=collection.fetch()
我希望你能看到我的困惑所在:-)我认为getRooms
不返回是一个bug,因为getRoomsByBed
使用它的方式意味着它返回一个数组/对象。