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;
}
Đó obj1
và obj2
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.obj1
và this.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.
Nguồn
2013-04-22 16:13:09
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. –
@ 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ẻ! –