javascript - 如何使用backbone.js的多态性,特别是super的属性?

标签 javascript inheritance backbone.js polymorphism

我正在尝试创建父类(super class)(MyShape)和子类(MyTriangle,MyRectangle)。我已经搜索了一些backbone.js的多态性概念...但对这个问题一无所知。

我有一个如下所示的 .json 文件

[
{
    "type": "rect",
    "x": 10,
    "y": 10,
    "w": 100,
    "h": 100,
    "color": "red"
},
{
    "type": "arc",
    "x": 210,
    "y": 20,
    "w": 200,
    "h": 150,
    "color": "blue"
}
]

我使用backbone.js制作了继承结构,如下所示。

    var MyShape = Backbone.Model.extend({
        defaults : {
            color : '',
            src : '',
        }
    });

    var MyRectangle = MyShape.extend({
        defaults : {
            x : 0,
            y : 0
        }
    });

    var MyTriangle = MyShape.extend({
        defaults : {
            x : -10,
            y : -10
        }
    });

    var Collection = Backbone.Collection.extend({
        model : MyShape,
    });

正如您在上面看到的,父类(super class)(MyShape)具有 color 和 src 属性。因为这个我有一个问题。如果我创建 MyTriangle 实例,我认为我无法在该对象上使用 src 或颜色属性。

问:如果我想编写如下代码(此示例是基于Java的),我应该如何编码?

    MyShape myShape = null;
    if (type.equals("rect")) {
        myShape = new MyRectangle(x, y, w, h);
    } else if (type.equals("arc")) {
        myShape = new MyArc(x, y, w, h);
    } else if (type.equals("triangle")) {
        myShape = new MyTriangle(x, y, w, h);
    } else {
        return null;
    }


    // option - src or color
    if (jsonObject.has("src")) {
        myShape.setImg(jsonObject.get("src").toString());
    } else if (jsonObject.has("color")) {
        myShape.setColor(jsonObject.get("color").toString);
    } else {
        return null;
    }

我必须维护这个结构(MyShape、MyTriangle、MyRectangle)。

非常感谢您的帮助。

最佳答案

要使用父类的默认值,您需要扩展父类的默认值。

例如( source )

var MyRectangle = defaults : _.extend({}, MyShape.prototype.defaults, {
        x : 0,
        y : 0
     })
});

在 Backbone 集合中使用多态模型( sourcesimilar question )

A collection can also contain polymorphic models by overriding this property with a constructor that returns a model.

var Library = Backbone.Collection.extend({

   model: function(attrs, options) {
     if (condition) {
      return new PublicDocument(attrs, options);
    } else {
    return new PrivateDocument(attrs, options);
    }
  }
});

example将所有内容放在一起

关于javascript - 如何使用backbone.js的多态性,特别是super的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862861/

相关文章:

ajax - Backbone 通过 AJAX 向服务器发送参数

c# - 使用 jquery 访问 Asp.net 动态下拉列表

javascript - 如何在 Chart.js 上检查图表类型

c++ - 嵌套类设计 C++ virtual

javascript - 将 Backbone.Layout 定义为 require js 模块?

javascript - 如何在基于 Backbone.js 的应用程序中干净地获取 401

javascript - javascript中的毫秒时间

javascript - 为什么当我提交聊天应用程序的表单时,输出会乘以我提交的次数

java - 如何将构造函数从父类(super class)继承到子类

AngularJS:需要复制继承的依赖项?