何时/为什么我应该从BackboneJS模型/集合扩展函数返回?

时间:2013-10-22 10:29:29

标签: javascript backbone.js

我是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是如何工作的。 : - )

由于

1 个答案:

答案 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远不是面向对象的,所以不要从字面上理解,但这个概念在同一个球场附近。