როგორ გავხადოთ ობიექტის თვისება შეუცვლელი?
sobes.tech AI
პასუხი AI-სგან
ობიექტის თვისების გაუქმება რამდენიმე გზით შეიძლება:
-
Object.defineProperty()გამოყენება:ეს მეთოდი საშუალებას გაძლევთ განსაზღვროთ ან შეცვალოთ ობიექტის თვისებები უფრო დეტალურად კონტროლით. გაუქმებული თვისების შესაქმნელად, უნდა დააყენოთ თვისების დესკრიპტორი
writable: false:const obj = {}; Object.defineProperty(obj, 'myProperty', { value: 'გაუქმებელი მნიშვნელობა', writable: false, // ხდის თვისებას გაუქმებად enumerable: true, // თვისება იქნება ხილული სიის დროს configurable: true // თვისება შეიძლება წაიშალოს ან შეცვალოს მისი დესკრიპტორი }); // მნიშვნელობის შეცვლა იგნორირებულია არა მკაცრ რეჟიმში // და გამოიწვევს შეცდომას მკაცრ რეჟიმში obj.myProperty = 'ახალი მნიშვნელობა'; console.log(obj.myProperty); // გამოიტანს "გაუქმებელი მნიშვნელობა"თუ დააყენებთ
configurable: false, თვისება ვერ იქნება წაშლილი ან შეცვლილი მისი დესკრიპტორი (შეიცვლებაwritable-იც).const obj2 = {}; Object.defineProperty(obj2, 'myProperty', { value: 'გაუქმებელი და მარტივად წაშლადი არაა', writable: false, enumerable: true, configurable: false // ხდის დესკრიპტორს გაუქმებად }); // მნიშვნელობის შეცვლა obj2.myProperty = 'ახალი მნიშვნელობა'; console.log(obj2.myProperty); // გამოიტანს "გაუქმებელი და მარტივად წაშლადი არაა" // თვისების წაშლა delete obj2.myProperty; console.log(obj2.myProperty); // გამოიტანს "გაუქმებელი და მარტივად წაშლადი არაა" -
Object.freeze()გამოყენება:ეს მეთოდი ხდის ობიექტს "დახუჭულს". ეს ნიშნავს, რომ ახალი თვისებები ვერ დაემატება, არსებული წაიშლება, მნიშვნელობები ვერ შეიცვლება (შეიცვლება მათი სიის და დესკრიპტორის), ასევე ობიექტის პროტოტიპი ვერ შეიცვლება:
const obj = { myProperty: 'გაუქმებელი მნიშვნელობა' }; Object.freeze(obj); // მნიშვნელობის შეცვლა obj.myProperty = 'ახალი მნიშვნელობა'; console.log(obj.myProperty); // გამოიტანს "გაუქმებელი მნიშვნელობა" // ახალი თვისების დამატება obj.newProperty = 'ახალი'; console.log(obj.newProperty); // გამოიტანს `undefined` // თვისების წაშლა delete obj.myProperty; console.log(obj.myProperty); // გამოიტანს "გაუქმებელი მნიშვნელობა"მნიშვნელოვანია აღინიშნოს, რომ
Object.freeze()ზედაპირულია. თუ თვისება სხვა ობიექტია, ის არ იქნება გაყინული. -
constგამოყენება:საკვანძო სიტყვა
constხდის ობიექტზე მითითებას გაუქმებად, მაგრამ არა თავად ობიექტს. თქვენ ვერ შეცვლით მითითებას სხვა ობიექტზე, მაგრამ შეგიძლიათ შეცვალოთ ობიექტის თვისებები:const obj = { myProperty: 'დაწყებითი მნიშვნელობა' }; // შეიძლება შეცვალოთ თვისების მნიშვნელობა obj.myProperty = 'ახალი მნიშვნელობა'; console.log(obj.myProperty); // გამოიტანს "ახალი მნიშვნელობა" // ვერ შეცვლით მითითებას // obj = { სხვა თვისება: 'სხვა' }; // გამოიწვევს TypeError
შედარების სია მეთოდების:
| მეთოდი | რა ხდის გაუქმებად? | გაუქმების დონე |
|---|---|---|
Object.defineProperty() |
კონკრეტულ თვისებას | დესკრიპტორის მიხედვით |
Object.freeze() |
მთელ ობიექტს | ზედაპირული |
const |
მითითებას ობიექტზე | ცვლადი |
მეთოდების არჩევანი დამოკიდებულია იმაზე, რამდენად დეტალურად უნდა იყოს გაუქმება. ერთი თვისებისთვის გამოიყენეთ Object.defineProperty(), მთელ ობიექტისთვის - Object.freeze(). მითითების შეცვლის თავიდან აცილებისთვის გამოიყენეთ const.