JavaScript: Object.defineProperty

By Xah Lee. Date: . Last updated: .
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]

JavaScript Define Properties

BUY ΣJS JavaScript in Depth