7

我有以下代码:

MyObject.prototype.doIt = function()
{
     var a = this.obj1;
     var b = this.obj2; 
}

如何交换this.obj1this.obj2的值,使 obj1 变为 obj2 而 obj2 变为 obj1。

!注意:请记住,我不使用原始类型。

4

5 回答 5

15

您可以使用如下简单的标识函数交换任意数量的对象或文字,甚至是不同类型的对象或文字:

var swap = function (x){return x};
b = swap(a, a=b);
c = swap(a, a=b, b=c);

这在 JavaScript 中有效,因为它接受额外的参数,即使它们没有被声明或使用。赋值a=b等发生在a传递给函数之后。

于 2013-12-15T23:58:15.813 回答
4

在交换时使用临时变量来保存其中一个对象的内容:

var tmp = this.obj1;
this.obj1 = this.obj2;
this.obj2 = tmp;
于 2013-04-22T16:15:22.137 回答
2

您可以轻松地交换属性:

MyObject.prototype.doIt = function()
{
     var a = this.obj1;
     var b = this.obj2;
     this.obj1 = b;
     this.obj2 = a;
}

obj1obj2不是原始类型无关紧要。您实际上不需要两个变量:

MyObject.prototype.doIt = function()
{
     var a = this.obj1;
     this.obj1 = this.obj2;
     this.obj2 = a;
}

但是,如果此代码之外的任何引用this.obj1this.obj2已经存在,它们将不会被交换。

在交换this.obj1this.obj2无处不在(包括现有参考)方面,我认为这不能完全做到。您可以删除所有属性,例如this.obj1(将它们保存在某处),添加来自 的属性this.obj2,然后对this.obj2. 但是,您将无法交换原型,因此对象无法从根本上交换身份。

于 2013-04-22T16:13:09.783 回答
2

我们可以使用关于破坏对象的信息,如下面的代码:

let a = 2;
let b = 4;
[a, b] = [b, a];
于 2020-07-20T02:54:25.710 回答
0

这是一个带有具体对象的示例,假设您的原始对象是 2 个 div,div1 和 div2。

为了交换它们,

var temp1 = div1;
var temp2 = div2;

div1 = 温度 2;
div2 = temp1;

于 2013-09-20T19:32:24.763 回答