0

大家好,我有一个问题。所以我有这个 Sprite 类,它基本上保存了位置等基本信息。现在它有一个对象属性

this.pos = {x: 0, y: 0}

然后我也有一些继承自它的东西,它是一个 Ball 类。现在,每次我调用 new Ball(px, py) 时,它都会在适当的位置实例化一个球,但它也会将在它之前实例化的每个球移动到相同的位置。

Ball里面的代码是:

this.pos.x = px;
this.pos.y = py;

我不知道这是罪魁祸首,直到我将其更改为:

this.pos = {x: px, y: py};

在这种情况下,它工作得很好。现在我只是对为什么后者起作用而不是前者对我来说它应该做同样的事情感到困惑。

4

1 回答 1

0

按照您的设置方式,您的所有对象都共享同一个位置对象,因此只要您更改该对象,它们就会发生变化。当你用{}字面量声明一个新对象时,它会创建一个新的、单独的对象,你可以在不影响其他对象的情况下对其进行更改。

由于您将对象称为类,因此我假设您来自一种与 Javascript 不同的语言。虽然有些库会创建一个更像类的结构,但我建议您阅读一些关于继承如何在 Javascript 中工作的内容。您应该会发现这些关于继承和原型链以及创建对象的MDN 文章特别有帮助!

于 2013-10-28T19:20:43.683 回答