我有以下代码:
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
传递给函数之后。
在交换时使用临时变量来保存其中一个对象的内容:
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
. 但是,您将无法交换原型,因此对象无法从根本上交换身份。
我们可以使用关于破坏对象的信息,如下面的代码:
let a = 2;
let b = 4;
[a, b] = [b, a];
这是一个带有具体对象的示例,假设您的原始对象是 2 个 div,div1 和 div2。
为了交换它们,
var temp1 = div1;
var temp2 = div2;
div1 = 温度 2;
div2 = temp1;