【发布时间】:2015-11-23 02:27:47
【问题描述】:
我正在尝试创建超类(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,
});
如上所示,超类(MyShape)具有 color 和 src 属性。因为这个,我有一个问题。如果我创建 MyTriangle 实例,我认为我不能在该对象上使用 src 或颜色属性。
Q.如果我想编写如下代码(此示例是基于 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)。
非常感谢您的帮助。
【问题讨论】:
-
为什么您要求澄清 Backbone 的多态性,同时直接限制答案以显示如何使用您的代码进行多态性?
-
“如果我创建 MyTriangle 实例,我认为我不能在该对象上使用 src 或颜色属性。” - 你为什么这么认为..? 使用到底是什么意思??
-
如果我执行“var myshape = new MyTriangle();”那么myshpe的类型当然是MyTriangle。这意味着,我无法设置超类(MyShape)中的 src 或 color 属性。我想要做的是设置 src 或 img,同时拥有它们的形状标识(MyTriangle 或 MyRectangle)。有可能吗?
标签: javascript inheritance backbone.js polymorphism