我是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是如何工作的。:-)
谢谢
你可以考虑将 Backbone 中使用的 extend
函数作为对 OO 世界的引用,其中类通常被扩展以创建子类。在Javascript中,这些"类"必须存储在变量中(例如,在Java中声明类),以使它们可供应用程序使用。
所以你可以看到这个:
var Dog = Mammal.extend({...});
var dog = new Dog();
作为这个的一个版本
class Dog extends Mammal { ... }
Dog dog = new Dog();
因此,主干扩展函数返回正在扩展的"类"的"子类"。当然,Javascript远不是面向对象的,所以不要从字面上理解这一点,但这个概念是同一个大概的。