0

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

谢谢

4

1 回答 1

1

您可以将extendBackbone 中使用的 -function 视为对 OO 世界的参考,其中类通常被扩展以创建子类。在 Javascript 中,这些“类”必须存储在变量中(例如,在 Java 中声明类)以使它们可供应用程序使用。

所以你可以看到这个:

var Dog = Mammal.extend({...});
var dog = new Dog();

作为这个的一个版本

class Dog extends Mammal { ... }
Dog dog = new Dog();

因此,Backbone 扩展函数返回正在扩展的“类”的“子类”。当然,Javascript 与面向对象相去甚远,所以不要从字面上理解这一点,但这个概念是差不多的。

于 2013-10-22T12:55:34.743 回答