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() |
Жок | Жок | Жок |