我是BackboneJS的新手并在Smashing Magazine上查看这篇文章,我想知道何时/为什么扩展函数会返回模型/集合/什么。
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 });
}
}
});
请善待。我并不想破坏别人的代码 - 我只是想了解Backbone是如何工作的。 : - )
由于
答案 0 :(得分:1)
你可以考虑Backbone中使用的extend
函数作为对OO世界的引用,其中类通常被扩展为创建SubClasses。在Javascript中,这些“类”必须存储在变量中(例如,在Java中声明类),以使它们可供应用程序使用。
所以你可以看到这个:
var Dog = Mammal.extend({...});
var dog = new Dog();
作为此
的版本class Dog extends Mammal { ... }
Dog dog = new Dog();
因此Backbone扩展函数返回被扩展的'class'的'子类'。当然,Javascript远不是面向对象的,所以不要从字面上理解,但这个概念在同一个球场附近。