问题:当我更改多边形pointspoly2时,它也更改了另一个多边形pointspoly!

为什么更改一个也会更改另一个,而我们如何将解耦?

console.log(poly.getPoints()[1].x);  // 100

// Make a change to `poly2`
poly2.setPoints(poly.getPoints());
poly2.getPoints()[1].x=200

console.log(poly.getPoints()[1].x);  // 200 (both poly and poly2 are affected!)

jsfiddle: http://jsfiddle.net/8hFyv/

最佳答案

poly2.setPoints(poly.getPoints());

这是你的问题。 points数组是同一对象。

由于您的数组中有数组,因此slice(0)技巧不起作用,您需要深层复制。

幸运的是,您正在使用jQuery,它具有执行此操作的方法。

将以上行替换为:
poly2.setPoints($.extend(true, [], poly.getPoints()));

10-05 20:52