HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
View in English Always switch to English
L'algorithme de clonage structuré est un nouvel algorithme défini par la spécification HTML5 pour sérialiser les objets JavaScript complexes. Il est plus puissant que JSON en cela qu'il supporte la sérialisation d'objets contenant des graphes cycliques — des objets peuvent faire référence à des objets faisant référence à d'autres objets dans le même graphe. De plus, dans certains cas, l'algorithme de clonage structuré peut être plus efficace que JSON.
L'algorithme, essentiellement, parcourt tous les champs de l'objet original, copiant les valeurs de chaque champ dans un nouvel objet. Si un champ est lui-même un objet avec des champs, ces champs sont parcourus de manière récursive jusqu'à ce que chaque champ et sous-champ aient été copié dans le nouvel objet.
Il y a quelques avantages notables à utiliser l'algorithme de clonage structuré plutôt que JSON :
RegExp
Blob
File
FileList
ImageData
CanvasPixelArray
Error
Function
DATA_CLONE_ERR
lastIndex
Int32Array
Si vous voulez une copie profonde d'un objet (c'est-à-dire une copie récursive de toutes les propriétés imbriquées, en parcourant la chaîne des prototypes), vous devez employer une autre approche. Ce qui suit est un exemple possible.
function clone(objectToBeCloned) { // Cas basique. if (!(objectToBeCloned instanceof Object)) { return objectToBeCloned; } var objectClone; // Filtre les objets spéciaux. var Constructor = objectToBeCloned.constructor; switch (Constructor) { // Implémenter d’autres objets spéciaux ici. case RegExp: objectClone = new Constructor(objectToBeCloned); break; case Date: objectClone = new Constructor(objectToBeCloned.getTime()); break; default: objectClone = new Constructor(); } // Clone chaque propriété. for (var prop in objectToBeCloned) { objectClone[prop] = clone(objectToBeCloned[prop]); } return objectClone; }
Note : Cet algorithme ne prend en charge que les objets spéciaux RegExp, Array et Date. Vous pouvez implémenter d'autres cas spéciaux selon vos besoins.
Array
Date
window.history
window.postMessage()