Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该何时/为什么从BackboneJS模型/集合扩展函数返回?_Javascript_Backbone.js - Fatal编程技术网

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

Javascript 我应该何时/为什么从BackboneJS模型/集合扩展函数返回?,javascript,backbone.js,Javascript,Backbone.js,我是BackboneJS新手,在上阅读了这篇文章,我想知道扩展函数何时/为什么应该返回模型/集合/什么 var Hotel = Backbone.Model.extend({ defaults: { "availableRooms": ["a"], "rooms": [ { "name": "a", "size": 1200, "bed

我是BackboneJS新手,在上阅读了这篇文章,我想知道扩展函数何时/为什么应该返回模型/集合/什么

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
使用它的方式意味着它返回一个数组/对象。