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)));
我正在使用 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)));