From e2cebfcb94b43c5af23834af380768e7216c08e7 Mon Sep 17 00:00:00 2001 From: jjwheatley Date: Wed, 6 Aug 2025 18:23:02 +0200 Subject: [PATCH 1/3] [Term Entry] JavaScript Objects: preventExtensions() --- .../preventExtensions/preventExtensions.md | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md diff --git a/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md b/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md new file mode 100644 index 00000000000..4ec02e980cf --- /dev/null +++ b/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md @@ -0,0 +1,89 @@ +--- +Title: '.preventExtensions()' +Description: 'Prevents new properties from being added to an object while allowing existing properties to be modified or deleted.' +Subjects: + - 'Code Foundations' + - 'Computer Science' + - 'Web Development' +Tags: + - 'Objects' + - 'Properties' + - 'Methods' +CatalogContent: + - 'introduction-to-javascript' + - 'paths/front-end-engineer-career-path' +--- + +The **`Object.preventExtensions()`** method prevents new properties from being added to an object. Unlike `Object.freeze()` or `Object.seal()`, this method allows existing properties to be modified or deleted. It returns the object passed to the function. + +## Syntax + +```pseudo +Object.preventExtensions(obj) +``` + +- `obj`: The object to make non-extensible. + +> **Note:** Once an object is made non-extensible, it cannot be made extensible again. This operation is irreversible. + +## Example + +The following code demonstrates how `Object.preventExtensions()` works: + +```js +const user = { + name: 'Arthur', + age: 42, +}; + +// Show object is extensible +console.log(Object.isExtensible(user)); // true + +// Prevent extensions +Object.preventExtensions(user); + +// Show object is no longer extensible after using Object.preventExtensions() +console.log(Object.isExtensible(user)); // false + +// New properties cannot be added +user.email = 'john@example.com'; +console.log(user.email); // undefined + +// Existing properties can be modified +user.age = 31; +console.log(user.age); // 31 + +// Existing properties can be deleted +delete user.name; +console.log(user.name); // undefined +``` + +## Codebyte Example + +```codebyte/javascript +const config = { + theme: 'dark', + language: 'en' +}; + +console.log('Before preventExtensions:'); +console.log(Object.isExtensible(config)); +console.log(config); + +Object.preventExtensions(config); + +console.log('\nAfter preventExtensions:'); +console.log(Object.isExtensible(config)); + +// This will fail silently in non-strict mode +config.debug = true; +console.log('Attempted to add debug property:', config.debug); + +// Existing properties can still be modified +config.theme = 'light'; +console.log('Modified theme:', config.theme); + +// Existing properties can still be deleted +delete config.language; +console.log('After deleting language:', config); +``` From aa4b6bd3c2f94947df99367579fb1d85997489d2 Mon Sep 17 00:00:00 2001 From: Mamta Wardhani Date: Mon, 11 Aug 2025 15:53:06 +0530 Subject: [PATCH 2/3] Update preventExtensions.md --- .../preventExtensions/preventExtensions.md | 57 ++++++++++++------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md b/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md index 4ec02e980cf..d19945caebf 100644 --- a/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md +++ b/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md @@ -14,7 +14,9 @@ CatalogContent: - 'paths/front-end-engineer-career-path' --- -The **`Object.preventExtensions()`** method prevents new properties from being added to an object. Unlike `Object.freeze()` or `Object.seal()`, this method allows existing properties to be modified or deleted. It returns the object passed to the function. +The **`Object.preventExtensions()`** method prevents new properties from being added to an object. Unlike `Object.freeze()` or `Object.seal()`, this method still allows existing properties to be modified or deleted. It returns the same object that was passed to it. + +> **Note:** Once an object is made non-extensible, it cannot be made extensible again. This operation is irreversible. ## Syntax @@ -22,11 +24,15 @@ The **`Object.preventExtensions()`** method prevents new properties from being a Object.preventExtensions(obj) ``` +**Parameters:** + - `obj`: The object to make non-extensible. -> **Note:** Once an object is made non-extensible, it cannot be made extensible again. This operation is irreversible. +**Return value:** + +Returns the same object that was passed in, now marked as non-extensible. -## Example +## Example: Basic Usage of `Object.preventExtensions()` The following code demonstrates how `Object.preventExtensions()` works: @@ -37,53 +43,66 @@ const user = { }; // Show object is extensible -console.log(Object.isExtensible(user)); // true +console.log(Object.isExtensible(user)); // Prevent extensions Object.preventExtensions(user); // Show object is no longer extensible after using Object.preventExtensions() -console.log(Object.isExtensible(user)); // false +console.log(Object.isExtensible(user)); // New properties cannot be added user.email = 'john@example.com'; -console.log(user.email); // undefined +console.log(user.email); // Existing properties can be modified user.age = 31; -console.log(user.age); // 31 +console.log(user.age); // Existing properties can be deleted delete user.name; -console.log(user.name); // undefined +console.log(user.name); +``` + +The output generated by this code is: + +```shell +true +false +undefined +31 +undefined ``` ## Codebyte Example +This example shows the effect of `Object.preventExtensions()` in non-strict mode, and notes how strict mode would throw a `TypeError`: + ```codebyte/javascript const config = { theme: 'dark', language: 'en' }; -console.log('Before preventExtensions:'); -console.log(Object.isExtensible(config)); -console.log(config); +console.log('Before preventExtensions:', Object.isExtensible(config)); Object.preventExtensions(config); -console.log('\nAfter preventExtensions:'); -console.log(Object.isExtensible(config)); +console.log('After preventExtensions:', Object.isExtensible(config)); -// This will fail silently in non-strict mode +// Non-strict mode: fails silently config.debug = true; -console.log('Attempted to add debug property:', config.debug); +console.log('Attempted to add debug property:', config.debug); // undefined + +// Strict mode: will throw TypeError if uncommented +// 'use strict'; +// config.debug = true; -// Existing properties can still be modified +// Modifying existing properties works config.theme = 'light'; -console.log('Modified theme:', config.theme); +console.log('Modified theme:', config.theme); // light -// Existing properties can still be deleted +// Deleting existing properties works delete config.language; -console.log('After deleting language:', config); +console.log('After deleting language:', config); // { theme: 'light' } ``` From fbeed0929d08200ff7580f4284aaac55e6aa1eb8 Mon Sep 17 00:00:00 2001 From: Mamta Wardhani Date: Mon, 11 Aug 2025 15:54:14 +0530 Subject: [PATCH 3/3] Update preventExtensions.md --- .../objects/terms/preventExtensions/preventExtensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md b/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md index d19945caebf..11e6a2cd468 100644 --- a/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md +++ b/content/javascript/concepts/objects/terms/preventExtensions/preventExtensions.md @@ -14,7 +14,7 @@ CatalogContent: - 'paths/front-end-engineer-career-path' --- -The **`Object.preventExtensions()`** method prevents new properties from being added to an object. Unlike `Object.freeze()` or `Object.seal()`, this method still allows existing properties to be modified or deleted. It returns the same object that was passed to it. +The **`Object.preventExtensions()`** method prevents new properties from being added to an object. Unlike [`Object.freeze()`](https://www.codecademy.com/resources/docs/javascript/objects/freeze) or `Object.seal()`, this method still allows existing properties to be modified or deleted. It returns the same object that was passed to it. > **Note:** Once an object is made non-extensible, it cannot be made extensible again. This operation is irreversible.