Middle
Obyekt var, onun bəzi dəyərləri funksiyalardır. Onun dərin surətdə kopyasını necə etmək olar? Çətinliklər varmı?
sobes.tech Süni İntellekt
AI-dan cavab
JavaScript-də funksiyalarla dərin nüsxə çıxarma vəzifəsi asan deyil, çünki standart metodlar (məsələn, JSON.parse(JSON.stringify(obj))) funksiyaları kopyalamır.
Funksiyaları saxlayaraq dərin nüsxə çıxarmaq üçün, obyekt üzərində rekursiv keçid və hər bir xüsusiyyəti kopyalamaq mümkündür:
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj; // Primitivlər və funksiyalar olduğu kimi qaytarılır
}
if (typeof obj === 'function') {
return obj.bind({}); // Sadəcə funksiyanı qaytarmaq və ya bağlama yaratmaq olar
}
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;
}
Çətinliklər:
- Funksiyalar referensiya kimi kopyalanır, çünki onların daxili vəziyyəti (bağlamalar) kopyalanmaz.
- Əgər funksiyalar xarici kontekstdən asılıdırsa, nüsxə fərqli işləyə bilər.
- Dövr edən referanslar əlavə işləmə tələb edir (məsələn, WeakMap istifadə edilə bilər).
Beləliklə, funksiyalarla dərin kopyalama mümkündür, lakin funksiyalar referensiya kimi kopyalanır və bu nəzərə alınmalıdır.