Middle
Il y a un objet, dont certaines valeurs sont des fonctions. Comment faire une copie profonde ? Y a-t-il des difficultés ?
sobes.tech IA
Réponse de l'IA
La copie profonde d’un objet avec des fonctions en JavaScript n’est pas triviale, car les méthodes standard (par exemple, JSON.parse(JSON.stringify(obj))) ne copient pas les fonctions.
Pour faire une copie profonde en conservant les fonctions, on peut utiliser une traversée récursive de l’objet et copier chaque propriété:
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj; // Les primitives et fonctions sont renvoyées telles quelles
}
if (typeof obj === 'function') {
return obj.bind({}); // On peut simplement renvoyer la fonction ou créer un binding
}
if (Array.isArray(obj)) {
return obj.map(deepClone);
}
const clonedObj = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
clonedObj[key] = deepClone(obj[key]);
}
}
return clonedObj;
}
Difficultés:
- Les fonctions sont copiées par référence, car leur état interne (fermetures) ne peut pas être cloné.
- Si les fonctions dépendent du contexte externe, la copie peut fonctionner différemment.
- Les références circulaires nécessitent une gestion supplémentaire (par exemple, avec WeakMap).
Ainsi, la copie profonde avec des fonctions est possible, mais les fonctions sont copiées comme des références, ce qu’il faut prendre en compte.