Javascript,将对象按值传递给构造函数

Javascript, pass-by-value an object to a constructor

我正在使用 Node.js 开发游戏;我有一个包含 position 属性和 fire 方法的机器人 class。此方法的作用如下:

Bot.prototype.fire = function () {
    this.bombs.push(new Bomb(this.position));
};

显然,炸弹的位置必须与机器人的位置不同,所以我希望 this.position 被复制到我的新炸弹对象中。 但是在这种情况下,对象是通过引用而不是值传递给构造函数的,所以如果我在 Bomb 的构造函数中写 this.position = position,游戏将无法运行。

现在我的问题很简单:是否有一种 简单的 方法(我不想为此定义一个新函数)来传递 position按值而不是按引用对象?或者我是否被迫在 Bomb 的构造函数中写了这样的东西:

this.position = {
    x: position.x,
    y: position.y,
    angle: position.angle
};

提前感谢您的帮助:)

如果您正在使用 jQuery,您可以轻松地按值复制对象。

var obj = {foo: 'foo', bar: 'bar'};

var newObject = jQuery.extend({}, obj);

您还可以使用 true 作为第一个参数进行深度复制(慢速,递归)。

var newObject = jQuery.extend(true, {}, obj);

您不能通过引用传递对象。但是您可以在传递对象之前克隆它。最简单的是使用 Object.create():

Bot.prototype.fire = function () {
    this.bombs.push(new Bomb(Object.create(this.position)));
};

您可以使用 Object.create:

this.bombs.push(new Bomb(Object.create(this.position)));