我有以下代码:
MyObject.prototype.doIt = function()
{
var a = this.obj1;
var b = this.obj2;
}
如何交换 this.obj1 和 this.obj2 的值,使 obj1 变为 obj2,obj2 变为 obj1。
!注意:请记住,我不使用原始类型。
您可以使用如下简单的标识函数交换任意数量的对象或文字,甚至是不同类型的对象或文字:
var swap = function (x){return x};
b = swap(a, a=b);
c = swap(a, a=b, b=c);
这在 JavaScript 中有效,因为它接受额外的参数,即使它们没有声明或使用。 赋值
a=b
等发生在 a
传递到函数之后。
我们可以使用关于破坏对象,如下面的代码:
let a = 2;
let b = 4;
[a, b] = [b, a];
在交换时使用临时变量来保存其中一个对象的内容:
var tmp = this.obj1;
this.obj1 = this.obj2;
this.obj2 = tmp;
您可以轻松地交换属性:
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
执行相同的操作。但是,您将无法交换原型,因此对象无法从根本上交换身份。
这是一个具体对象的示例,假设您的原始对象是 2 个 div,div1 和 div2。
交换它们:
var temp1 = div1;
var temp2 = div2;
div1 = temp2;
div2 = temp1;