Middle
Объекте ҳаст, ки баъзе арзишҳояш функсияҳо мебошанд. Чӣ гуна метавон нусхаи амиқро аз он гирифт? Оё мушкилот ҳастанд?
sobes.tech AI
Ҷавоб аз AI
Копии амиқи амиқи объект бо функсияҳо дар JavaScript вазифаи осон нест, зеро усулҳои стандартӣ (масалан, JSON.parse(JSON.stringify(obj))) функсияҳоро нусхабардорӣ намекунанд.
Барои сохтани нусхаи амиқи бо нигоҳ доштани функсияҳо, шумо метавонед гузариши рекурсивии объектро истифода баред ва ҳар як хусусиятро нусхабардорӣ кунед:
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj; // Примитивҳо ва функсияҳо ба ҳамин ҳол баргардонида мешаванд
}
if (typeof obj === 'function') {
return obj.bind({}); // Мумкин аст ба функсия танҳо баргардонед ё бандсозӣ созед
}
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;
}
Мушкилотҳо:
- Функсияҳо ба рӯйхатӣ нусхабардорӣ мешаванд, зеро ҳолати дохилии онҳо (бастакунӣ) наметавонад нусхабардорӣ шавад.
- Агар функсияҳо аз контексти беруна вобаста бошанд, нусха метавонад дигар кор кунад.
- Ҳаввосҳои цикликӣ талаб мекунанд, ки муносибати иловагӣ (масалан, бо WeakMap) анҷом дода шавад.
Аз ин рӯ, нусхаи амиқи бо функсияҳо имконпазир аст, аммо функсияҳо ҳамчун рӯйхатӣ нусхабардорӣ мешаванд, ва ин бояд ба назар гирифта шавад.