使用 Object.defineProperty() 方法将 getter 和 setter 添加到已存在的对象时出错

Getting an error while using Object.defineProperty() method to add getters and setters to an already existing object

错误:未捕获类型错误属性描述必须是一个对象:h

使用 Object.defineProperty() 方法将 setter 和 getter 添加到现有对象以修改对象中 属性 的值时出现上述错误。

const jump = {
height: "10:00mtr",
time: "10seconds",
    
}

//adding a setters and getters to height.
Object.defineProperties(jump, "height2", {
        get: function () {
            return this.height;
        },
        set: function (newHeight) {
            return this.height = newHeight;
    },
});

//adding a setters and getters to time.
Object.defineProperties(jump, "time2", {
    get: function () {
        return this.time;
    },
    set: function (newTime) {
        return this.time = newTime;
    }

});

您使用的这种特殊语法是为 Object.defineProperty 而不是 Object.defineProperties 保留的。你唯一的错误是在你应该使用 Object.defineProperty.

的地方使用 Object.defineProperties

即使在你的问题标题中你询问了 Object.defineProperty 但你仍然在下面的代码中使用 Object.defineProperties

更正后的代码:

Object.defineProperty(jump, "height2", {
    get: function () {
        return this.height;
    },
    set: function (newHeight) {
        return this.height = newHeight;
    },
});

另一方面,Object.defineProperties用于一次定义多个属性,应该这样使用:

Object.defineProperties(jump, 
  {
    "height2": 
    {
      get: function () {
          return this.height;
      },
      set: function (newHeight) {
          return this.height = newHeight;
      }
    },
    "anotherProperty: 
    {
      ...
    }
  });