我有以下代码:
MyObject.prototype.doIt = function()
{
var a = this.obj1;
var b = this.obj2;
}
如何交换 this.obj1 和 this.obj2 的值,以便obj1变为obj2,obj2变为obj1。
!注意:请记住我不使用原始类型。
答案 0 :(得分:14)
您可以使用这样的简单身份函数交换任意数量的对象或文字,甚至是不同类型的文字:
var swap = function (x){return x};
b = swap(a, a=b);
c = swap(a, a=b, b=c);
这适用于JavaScript,因为即使未声明或使用它们,它也会接受其他参数。分配a=b
等在a
传递给函数后发生。
答案 1 :(得分:4)
使用临时变量在交换时保存其中一个对象的内容:
var tmp = this.obj1;
this.obj1 = this.obj2;
this.obj2 = tmp;
答案 2 :(得分:2)
您可以轻松地交换属性:
MyObject.prototype.doIt = function()
{
var a = this.obj1;
var b = this.obj2;
this.obj1 = b;
this.obj2 = a;
}
obj1
和obj2
不是原始类型是无关紧要的。您实际上不需要两个变量:
MyObject.prototype.doIt = function()
{
var a = this.obj1;
this.obj1 = this.obj2;
this.obj2 = a;
}
但是,如果在此代码之外已存在对this.obj1
或this.obj2
的任何引用,则不会交换它们。
就在任何地方(包括现有引用)交换this.obj1
和this.obj2
而言,我认为不能完全完成。您可以删除this.obj1
的所有属性(将其保存在某个位置),从this.obj2
添加属性,然后对this.obj2
执行相同操作。但是,您将无法交换原型,因此对象无法从根本上交换身份。
答案 3 :(得分:1)
我们可以使用销毁对象,如下代码所示:
let a = 2;
let b = 4;
[a, b] = [b, a];
答案 4 :(得分:0)
以下是具体对象的示例,假设您的原始对象是2个div,div1和div2。
交换它们,
var temp1 = div1;
var temp2 = div2;
div1 = temp2;
div2 = temp1;