revision:
The Object.defineProperties() static method defines new or modifies existing properties directly on an object, returning the object.
Object.defineProperties(obj, props)
Parameters:
obj : required. The object on which to define or modify properties.
props : required . An object whose keys represent the names of properties to be defined or modified and whose values are objects describing those properties. Each value in props must be either a data descriptor or an accessor descriptor; it cannot be both.
const object1 = {}; Object.defineProperties(object1, { property1: { value: 42, writable: true }, property2: {} }); console.log(object1.property1); // Expected output: 42
<div> <p id="obj-1"></p> <p id="obj-2"></p> <p id="obj-3"></p> </div> <script> const obj = {}; Object.defineProperties(obj, { property1: { value: true, writable: true, }, property2: { value: "Hello", writable: false, }, // etc. etc. }); document.getElementById("obj-1").innerHTML = "properties defined : " + obj.property1; document.getElementById("obj-2").innerHTML = "properties defined : " + obj.property2; document.getElementById("obj-3").innerHTML = "properties defined : " + obj.property2.writable; </script>
<div> <p id="obj-4"></p> <p id="obj-5"></p> <p id="obj-6"></p> <p id="obj-7"></p> </div> <script> const object1 = {}; Object.defineProperties(object1, { prop1: { value: "JavaScript", writable: true, }, prop2: { value: "TypeScript", writable: false, }, }); console.log(object1.prop1); // JavaScript console.log(object1.prop2); // TypeScript // This works since prop1 is writable document.getElementById("obj-4").innerHTML = "properties defined : " + object1.prop1; document.getElementById("obj-5").innerHTML = "properties defined : " + object1.prop2; object1.prop1 = "React"; console.log(object1.prop1); // React document.getElementById("obj-6").innerHTML = "properties defined : " + object1.prop1; // TypeError: Cannot assign to read only property 'prop2' of object '#<Object>' object1.prop2 = "Node"; console.log(object1.prop2); // TypeScript document.getElementById("obj-7").innerHTML = "properties defined : " + object1.prop2; </script>