Middle
Чӣ гуна метавон тағироти объектро дар JavaScript манъ кард?
sobes.tech AI
Ҷавоб аз AI
Мумкин аст аз методҳои дарунсохти Object истифода бурд:
Object.preventExtensions(obj): Мегӯяд, ки илова кардани хусусиятҳои нав ба объект манъ аст, аммо тағир додан ва нест кардани хусусиятҳои мавҷударо иҷозат медиҳад.Object.seal(obj): Манъ мекунад илова кардан ва нест кардани хусусиятҳоро, аммо тағир додани хусусиятҳои мавҷударо иҷозат медиҳад. Ин дар аслpreventExtensions+ манъ кардани нест кардан аст.Object.freeze(obj): Манъ мекунад илова кардан, нест кардан ва тағир додани хусусиятҳоро. Объектро ғайрифаъол мекунад. Инseal+ манъ кардани тағир додани хусусиятҳои мавҷударо дорад.
Маслиҳат барои истифода:
// Объекти ибтидоӣ
let myObject = { name: 'Alice', age: 30 };
// preventExtensions
Object.preventExtensions(myObject);
myObject.city = 'London'; // Дар режими сахт кор намекунад, дар режими ғайрирасмӣ танҳо нодида гирифта мешавад.
// seal
let mySealedObject = { name: 'Bob', age: 25 };
Object.seal(mySealedObject);
mySealedObject.age = 26; // Кор мекунад
delete mySealedObject.name; // Дар режими сахт кор намекунад.
mySealedObject.city = 'Paris'; // Дар режими сахт кор намекунад.
// freeze
let myFrozenObject = { name: 'Charlie', age: 35 };
Object.freeze(myFrozenObject);
myFrozenObject.age = 36; // Дар режими сахт кор намекунад.
delete myFrozenObject.name; // Дар режими сахт кор намекунад.
myFrozenObject.city = 'New York'; // Дар режими сахт кор намекунад.
Муҳим аст, ки ба ёд орем, ки Object.freeze ғайрифаъол аст. Агар объект дорои истинод ба дигар объектҳо бошад, ин объектҳои дохилӣ метавонанд тағир ёбанд, агар онҳо худ замонат дода нашаванд. Барои замонат додани амиқ, функсияи рекурсивӣ лозим аст.
// Маслиҳат барои замонат додани амиқ
function deepFreeze(obj) {
Object.freeze(obj); // Замонат медиҳем объектро
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
const prop = obj[key];
// Агар хусусият объект бошад (ва на null), онро рекурсиван замонат медиҳем
if (typeof prop === 'object' && prop !== null && !Object.isFrozen(prop)) {
deepFreeze(prop);
}
}
}
}
let nestedObject = {
name: 'Deep',
details: {
level: 1
}
};
deepFreeze(nestedObject);
nestedObject.details.level = 2; // Дар режими сахт кор намекунад.
Таблиғи муқоиса:
| Метод | Илова кардани хусусиятҳо | Нест кардани хусусиятҳо | Тағир додани хусусиятҳо |
|---|---|---|---|
Object.preventExtensions() |
Не | Бале | Бале |
Object.seal() |
Не | Не | Бале |
Object.freeze() |
Не | Не | Не |