我有以下代码:
MyObject.prototype.doIt = function()
{
var a = this.obj1;
var b = this.obj2;
}
我该如何交换 this.obj1 和 this.obj2 的值,使得 obj1 成为 obj2,obj2 成为 obj1。
注意:请记住我不是使用原始类型。
我有以下代码:
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
执行相同的操作。但是,您无法交换原型,因此对象不能从根本上交换身份。Object.getPrototypeOf()
和Object.setPrototypeOf()
交换原型,但是MDN强烈警告我们这对应用程序性能来说是一个非常糟糕的想法。 - Félix Brunet这里有一个具体对象的例子,假设你的原始对象是2个div,分别为div1和div2。
要交换它们,
var temp1 = div1;
var temp2 = div2;
div1 = temp2;
div2 = temp1;
const swap = x => x;
- Joshua Jarman