è possibile scambiare le proprietà abbastanza facilmente:
MyObject.prototype.doIt = function()
{
var a = this.obj1;
var b = this.obj2;
this.obj1 = b;
this.obj2 = a;
}
Che obj1
e obj2
non sono tipi primitivi è irrilevante. In realtà non c'è bisogno di due variabili:
MyObject.prototype.doIt = function()
{
var a = this.obj1;
this.obj1 = this.obj2;
this.obj2 = a;
}
Tuttavia, se esistono già al di fuori di questo codice tutti i riferimenti a this.obj1
o this.obj2
, non verranno scambiati.
In termini di scambio this.obj1
e this.obj2
ovunque (compresi i riferimenti esistenti), non penso che si possa fare completamente. È possibile rimuovere tutte le proprietà, ad esempio, this.obj1
(salvandole da qualche parte), aggiungere le proprietà da this.obj2
e quindi fare lo stesso per this.obj2
. Tuttavia, non sarà possibile scambiare i prototipi, quindi gli oggetti non possono scambiare le identità fondamentalmente.
fonte
2013-04-22 16:13:09
In effetti, è possibile scambiare il prototipo con l'uso di 'Object.getPrototypeOf()' e 'Object.setPrototypeOf()', ma [MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf) ci avverte fortemente che è una pessima idea per le prestazioni dell'applicazione. –
@ FélixBrunet - Non ci avevo pensato. Immagino sia possibile implementare qualcosa come [Smalltalk's 'become:' method] (https://gbracha.blogspot.com/2009/07/miracle-of-become.html). Freddo! –