快速提问,我对JavaScript很陌生,我无疑会从这个项目中学到很多东西。所以我提出一个问题(这可能是一个愚蠢的问题),我的问题是:
我打算构建一个动态生成Raphael或Joint.js形状的Web应用程序,两者都非常相似,动态我的意思是在用户输入之前会有一定数量的对象需要绘制,例如他们希望绘制的对象数量 - 所以这里有一些代码来强化我的问题:
var erd = Joint.dia.erd;
Joint.paper("world", 800, 250);
var e1 = erd.Entity.create({
rect: {
x: 220,
y: 70,
width: 100,
height: 60
},
label: "Entity"
});
所以,我创建了一个矩形类型的对象,但这是我想知道的 - 我可以这样做:
var erd = Joint.dia.erd;
Joint.paper("world", 800, 250);
int x, y;
for (int i = 0; i < numOfUserDefObjects; i++) {
var e1 = erd.Entity.create({
rect: {
x: x,
y: y,
width: 100,
height: 60
},
label: "Entity"
x + 20;
y - 40;
});
}
令我困惑的是var e1
。如果要创建2个对象,只要循环第二次遍历循环/创建第二个对象,循环中创建的第一个对象是否会从我的SVG / Canvas中删除/删除/覆盖?
对此的一点了解将不胜感激!再次,缺乏JavaScript经验,但这将改变。
再次感谢。
答案 0 :(得分:2)
在javascript中,用var
声明的局部变量具有函数范围。这意味着每个函数只有一个局部变量的副本。因此,在第二个代码块中,变量e1
只有一个副本,而for
循环在每次迭代中都为它分配不同的值。
你可以做你正在做的事情,但是e1
在你完成时只有一个值,并且该值将是分配给它的for
循环的最后一次迭代。
我不确切知道你要完成什么,但你可以像这样创建一个对象数组:
var erd = Joint.dia.erd;
Joint.paper("world", 800, 250);
var x = 0, y = 0;
var objs = [];
for (var i = 0; i < numOfUserDefObjects; i++) {
objs.push(erd.Entity.create({
rect: {
x: x,
y: y,
width: 100,
height: 60
},
label: "Entity"
}));
x += 20;
y -= 40;
}
// objs now contains an array of the created objects
注意:我还初始化了x和y,修复了使用var
而不是int
的声明,并在for
循环中正确递增和递减x和y。您发布的代码中存在大量语法错误。