Object.defineProperty Setter函数的多个参数?

rob*_*don 4 javascript setter defineproperty

是否可以为Object.defineProperty setter函数提供多个参数?

例如

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;
}
Run Code Online (Sandbox Code Playgroud)

我没有从语法中得到任何错误,但我无法弄清楚如何调用setter函数并将其传递给两个参数.

Dam*_*ica 11

我在 setter 方法上也遇到了类似的困境,所以我以对象结束param(ES5 及更早版本):

  set size(param) {
    this.width = param.width;
    this.height = param.height;
  }
Run Code Online (Sandbox Code Playgroud)

从 ES6 开始,我们可以利用解构功能来简化 setter,如下所示:

  set size({width, height}) {
    this.width = width;
    this.height = height;
  }
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

this.size = {width: 800, height: 600};
Run Code Online (Sandbox Code Playgroud)


Ber*_*rgi 8

是否可以为Object.defineProperty setter函数提供多个参数?

是的,但是不可能调用它们(除了Object.getOwnPropertyDescriptor(obj, "joe").set(null, false)).使用分配给property(obj.joe = "doe";)的一个值调用setter - 您不能一次分配多个值.

如果你真的需要它们(无论出于何种原因),最好使用基本的setter方法(obj.setJoe(null, false)).