JavaScript: Object.defineProperty
Object.defineProperty(obj, key, descriptor)
-
Create/modify a
property's
Attributes
by
Property Descriptor.
Return the modified object.
(Reflect.defineProperty return boolean.)
/* [ create a property that's not enumerable ] */ const xx = {}; Object.defineProperty(xx, "pp", { value: 3, writable: true, enumerable: false, configurable: true, }); console.log(xx.pp === 3);
Make a property read-only:
/* [ make a property read-only ] */ const jj = { "pp": 3 }; Object.defineProperty(jj, "pp", { writable: false });
Note: once a property's “writable” attribute is set false
, it can't be set back to true
.
Default Values for Property Descriptor
Define Getter Property
Object.defineProperty(
object,
key,
{
get : function,
enumerable: false,
configurable: true
}
);
const jj = { pp: 3 }; // add a getter property key "gg" Object.defineProperty( jj, "gg", { get: function () { return "getter called"; }, }, ); console.log(jj.gg === "getter called");
[see Getter/Setter Properties]
Define Setter Property
Object.defineProperty(object_name, key, { set : function_with_1_param, enumerable: false, configurable: true});
const jj = { pp: 3 }; // add a setter property key "ss" Object.defineProperty( jj, "ss", { set: function (x) { console.log("setter called with arg " + x); }, }, ); jj.ss = 4; // prints: setter called with arg 4
[see Getter/Setter Properties]
Define Multiple Properties
[see Object.defineProperties]