JS Object Protection
In this page:
Object.freeze(object);
Object.seal(object);
Object.preventExtensions(object);
Object.defineProperty(object, "property", { writable: false });
Object.freeze() से Object को Freeze करना
Object.freeze(obj) किसी object को पूरी तरह लॉक कर देता है -- उसके बाद कोई properties जोड़ी, हटाई नहीं जा सकतीं और न ही उनके values बदले जा सकते हैं।
यह आमतौर पर उन values के लिए इस्तेमाल होता है जिन्हें constants या स्थिर configuration दर्शाना है जिसे कभी अनजाने में बदला नहीं जाना चाहिए।
उदाहरण: Freezing an Object with Object.freeze()
const config = Object.freeze({ apiUrl: "/api" });
config.apiUrl = "/changed"; // silently fails
console.log(config.apiUrl);
जाँचना कि Object Frozen है या नहीं
Object.isFrozen(obj) true लौटाता है अगर object को freeze किया गया है, जिससे code बदलाव की कोशिश करने का फ़ैसला करने से पहले यह स्थिति जाँच सकता है, या यह debug करने के लिए कि अपेक्षित बदलाव क्यों नहीं हुआ।
उदाहरण: Checking If an Object Is Frozen
const obj = Object.freeze({ a: 1 });
console.log(Object.isFrozen(obj));
Object.seal() से Object को Seal करना
Object.seal(obj) freeze से हल्का प्रतिबंध है -- यह नई properties जोड़ने या मौजूदा को हटाने से रोकता है, लेकिन पहले से मौजूद properties के values बदलने की अनुमति फिर भी देता है, जो तब उपयोगी है जब object की संरचना स्थिर रहनी चाहिए पर उसका data फिर भी अपडेट हो सके।
उदाहरण: Sealing an Object with Object.seal()
const user = Object.seal({ name: "Sam" });
user.name = "Amit"; // allowed, value can change
// user.age = 30; // not allowed, cannot add new property
console.log(user);
freeze() और seal() की Shallow प्रकृति
Object.freeze() और Object.seal() दोनों केवल object की अपनी सीधी properties की रक्षा करते हैं -- अगर उनमें से कोई property nested object रखती है, तो वह nested object पूरी तरह असुरक्षित और खुलकर बदलने योग्य रहता है, जब तक उसे अलग से freeze या seal न किया जाए।
उदाहरण: The Shallow Nature of freeze() and seal()
const obj = Object.freeze({ nested: { value: 1 } });
obj.nested.value = 99; // still works! nested object is not frozen
console.log(obj.nested.value);
freeze(), seal() और दोनों में से कोई नहीं के बीच चुनना
सचमुच स्थिर, निश्चित data (जैसे enum-शैली की configuration) के लिए Object.freeze() इस्तेमाल कीजिए; उस data के लिए Object.seal() जिसकी संरचना स्थिर रहनी चाहिए पर values वैध रूप से बदलते हैं; और जब दोनों में से कोई गारंटी वास्तव में ज़रूरी न हो, तो object को पूरी तरह अप्रतिबंधित छोड़ दीजिए।
उदाहरण: Choosing Between freeze(), seal(), and Neither
const MAX_USERS = Object.freeze({ limit: 100 }); // truly constant
const settings = Object.seal({ theme: "dark" }); // shape fixed, values can change
const data = { count: 0 }; // fully mutable
settings.theme = "light";
console.log(MAX_USERS, settings, data);
Chapter Quiz — Complete all 10 topics to unlock
0/10 topics done
Complete these topics first: