【问题标题】:Can't define set and get methods无法定义 set 和 get 方法
【发布时间】:2023-03-15 02:29:02
【问题描述】:

尝试使用访问器定义属性时出现错误。这是我的代码

变种人 = {}; Object.defineProperty(person, 'birthYear', { 价值:1997, 可写:真, 可枚举:真, 可配置:假, 设置:函数(值){ this.birthYear = 值; }, 得到:函数(){ return '出生年份 - ' + this.birthYear; } }); console.log(person.birthYear);

错误文本:

属性描述符无效。不能同时指定访问器和值 或可写属性。

如果我无法定义这样的 set 和 get 方法,我该怎么做?

【问题讨论】:

  • 您会删除value,但您不想要一个检索this.birthYear 的birthYear getter,因为这会产生无限递归。您需要将值存储在其他地方,例如不同的属性名称或符号,或变量中。
  • 是否有理由在一个对象上定义属性,而不是the prototype
  • ...仅供参考,您可以使用Object.create 一步完成该对象的创建/定义。
  • @SamOnela 因为没有在Object.prototype上安装任意属性,而且问题中的对象没有任何其他原型?

标签: javascript


【解决方案1】:

查看错误信息:

不能同时指定访问器和值或可写属性。

当您明确说明尝试编写属性时会发生什么时,说属性是否可写是没有意义的。

所以删除:

    writable: true,

而且你不能给它一个值,当你读取它时动态计算的值,所以删除:

    value: 1997,

然后你会得到一个关于递归的错误,因为每次你尝试读取person.birthYear时,你的getter函数都会尝试读取person.birthYear。

所以将值存储在其他地方。

var person = { _birthYear: 1997 };

Object.defineProperty(person, 'birthYear', {
    enumerable: true,
    configurable: false,
    set: function (value) {
        this._birthYear = value;
    },
    get: function() {
        return 'Birth year - ' + this._birthYear;
    }
});

console.log(person.birthYear);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-26
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多