2013-04-22 29 views
6

Tôi có đoạn mã sau:Swap hai đối tượng trong JavaScript

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

Làm thế nào tôi có thể trao đổi các giá trị của this.obj1this.obj2 nên obj1 trở thành obj2 và obj2 trở thành obj1.

! Lưu ý: Hãy nhớ rằng tôi không làm việc với các kiểu nguyên thủy.

Trả lời

2

Bạn có thể trao đổi các thuộc tính một cách dễ dàng đủ:

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

Đó obj1obj2 không loại nguyên thủy là không thích hợp. Bạn không thực sự cần hai biến:

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

Tuy nhiên, nếu có tài liệu tham khảo để this.obj1 hoặc this.obj2 đã tồn tại bên ngoài mã này, họ sẽ không được hoán đổi.

Trong điều khoản hoán đổi this.obj1this.obj2 ở khắp mọi nơi (bao gồm cả tham chiếu hiện có), tôi không nghĩ rằng điều đó có thể được thực hiện hoàn toàn. Bạn có thể loại bỏ tất cả các thuộc tính của, ví dụ: this.obj1 (lưu chúng ở đâu đó), thêm thuộc tính từ this.obj2 và sau đó thực hiện tương tự cho this.obj2. Tuy nhiên, bạn sẽ không thể hoán đổi các nguyên mẫu, vì vậy các đối tượng không thể trao đổi một cách cơ bản danh tính.

+0

Trong thực tế, bạn _could_ trao đổi nguyên mẫu với việc sử dụng 'Object.getPrototypeOf()' và 'Object.setPrototypeOf()', nhưng [MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf) mạnh mẽ cảnh báo chúng tôi đó là một ý tưởng thực sự tồi cho hiệu suất ứng dụng. –

+0

@ FélixBrunet - Đã không nghĩ về điều đó. Tôi đoán nó có thể thực hiện một cái gì đó như [Smalltalk của 'trở thành:' phương pháp] (https://gbracha.blogspot.com/2009/07/miracle-of-become.html). Mát mẻ! –

4

Sử dụng một biến tạm thời để giữ các nội dung của một trong những đối tượng trong khi trao đổi:

var tmp = this.obj1; 
this.obj1 = this.obj2; 
this.obj2 = tmp; 
0

Dưới đây là một ví dụ với các đối tượng cụ thể, nói đối tượng ban đầu của bạn là 2 divs, div1 và div2.

Để đổi chúng,

var temp1 = div1;
var temp2 = div2;

div1 = temp2;
div2 = temp1;

12

Bạn có thể trao đổi bất kỳ số lượng các đối tượng hoặc chữ, thậm chí các loại khác nhau, sử dụng một hàm sắc đơn giản như thế này:

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

này hoạt động trong JavaScript vì nó chấp nhận lập luận thêm ngay cả khi họ không tuyên bố hay đã sử dụng. Các bài tập a=b v.v., xảy ra sau khi a được chuyển vào hàm.

Các vấn đề liên quan