Javascript,将一个对象传递给构造函数

时间:2015-04-24 15:49:20

标签: javascript pass-by-value

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

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
};

提前感谢您的帮助:)

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果您使用的是jQuery,则可以通过值轻松复制对象。

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

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

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

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

答案 2 :(得分:0)

您可以使用Object.create

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