Search code examples
javascriptsetterdefineproperty

Multiple Parameters for Object.defineProperty Setter Function?


Is it possible to have multiple parameters for Object.defineProperty setter function?

E.G.

var Obj = function() {
  var obj = {};
  var _joe = 17;

  Object.defineProperty(obj, "joe", {
    get: function() { return _joe; },
    set: function(newJoe, y) {
      if (y) _joe = newJoe;
    }
  });

  return obj;
}

I don't get any errors from the syntax, but I can't figure out how to call the setter function and pass it two arguments.


Solution

  • Is it possible to have multiple parameters for Object.defineProperty setter function?

    Yes, but it's not possible to invoke them (other than Object.getOwnPropertyDescriptor(obj, "joe").set(null, false)). A setter is invoked with the one value that is assigned to the property (obj.joe = "doe";) - you cannot assign multiple values at once.

    If you really need them (for whatever reasons), better use a basic setter method (obj.setJoe(null, false)).