revision:
The Object.seal() static method seals an object. Sealing an object prevents extensions and makes existing properties non-configurable. A sealed object has a fixed set of properties: new properties cannot be added, existing properties cannot be removed, their enumerability and configurability cannot be changed, and its prototype cannot be re-assigned. Values of existing properties can still be changed as long as they are writable. seal() returns the same object that was passed in.
Object.seal(obj)
Parameters:
obj : required. The object which should be sealed.
const object1 = { property1: 42 }; Object.seal(object1); object1.property1 = 33; console.log(object1.property1); // Expected output: 33 delete object1.property1; // Cannot delete when sealed console.log(object1.property1); // Expected output: 33
<div> <p id="seal-1"></p> <p id="seal-2"></p> <p id="seal-3"></p> </div> <script> const obj = { prop() {}, foo: "bar", }; // New properties may be added, existing properties may be changed or removed. obj.foo = "baz"; obj.lumpy = "woof"; delete obj.prop; const o = Object.seal(obj); o === obj; // true document.getElementById("seal-1").innerHTML = "o === obj : " + (o === obj); Object.isSealed(obj); // true document.getElementById("seal-2").innerHTML = "obj is sealed ?: " + Object.isSealed(obj); // Changing property values on a sealed object still works. obj.foo = "quux"; document.getElementById("seal-3").innerHTML = "changing values of obj ?: " + obj.foo; // But you can't convert data properties to accessors, or vice versa. Object.defineProperty(obj, "foo", { get() { return "g"; }, }); // throws a TypeError // Now any changes, other than to property values will fail. obj.quaxxor = "the friendly duck"; // silently doesn't add the property delete obj.foo; // silently doesn't delete the property // ...and in strict mode such attempts will throw TypeErrors. function fail() { "use strict"; delete obj.foo; // throws a TypeError obj.sparky = "arf"; // throws a TypeError } fail(); // Attempted additions through // Object.defineProperty will also throw. Object.defineProperty(obj, "ohai", { value: 17, }); // throws a TypeError Object.defineProperty(obj, "foo", { value: "eit", }); // changes existing property value </script>
<div> <p id="seal-4"></p> <p id="seal-5"></p> <p id="seal-6"></p> </div> <script> const obj1 = { property1: 'Marry'}; const obj2 = Object.seal(obj1); // prevents other code from deleting properties of an object. obj2.property1 = 'carry'; console.log(obj2.property1); document.getElementById("seal-4").innerHTML = "property after sealing : " + obj2.property1; const object1 = { property1: 29 }; Object.seal(object1); // Prevents other code from deleting properties of an object. object1.property1 =45; console.log(object1.property1); document.getElementById("seal-5").innerHTML = "property after sealing : " + object1.property1; delete object1.property1; // cannot delete when sealed document.getElementById("seal-6").innerHTML = "property after sealing and deleting: " + object1.property1; </script>
<div> <p id="seal-7"></p> <p id="seal-8"></p> </div> <script> // creating an object constructor and assigning values to it const obj_1 = { property1: 'initial_data' }; document.getElementById("seal-7").innerHTML = "object property : " + JSON.stringify(obj_1); // creating a second object which will seal the properties of the first object const obj_2 = Object.seal(obj_1); // Updating the properties of the frozen object obj_2.property1 = 'new_data'; // Displaying the properties of the frozen object console.log(obj_2.property1); document.getElementById("seal-8").innerHTML = "object property : " + JSON.stringify(obj_2.property1); </script>