【问题标题】:Applying spread operator on object with getter使用 getter 对对象应用扩展运算符
【发布时间】:2019-09-29 13:35:26
【问题描述】:

如果你用 getter 声明一个类

class Person {
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  get fullName() {
    return [this.firstName, this.lastName].join(" ");
  }
}

你可以在实例化一个新对象后访问getter

const person = new Person("Jane", "Doe");
console.log(person.fullName); // "Jane Doe"

但这在使用扩展运算符复制对象后不起作用

const personCopy = { ...person };
console.log(personCopy.fullName); // undefined

我认为这有点令人困惑。

【问题讨论】:

  • 所以你在一分钟内回答了你自己的问题。
  • 是的,我认为值得分享。 stackoverflow.blog/2011/07/01/…
  • 好吧,personCopy 是一个普通对象,它没有从 Person.prototype 继承一个 getter。为什么你仍然期望.fullName 工作?
  • @Bergi 我的意思是,两个非常不同的操作的语法是相同的,可能会导致混淆。

标签: javascript ecmascript-2018


【解决方案1】:

仅限spread operator

将自己的可枚举属性从提供的对象复制到新对象。

而使用get syntax定义的属性

将在对象的原型上定义。

【讨论】:

    【解决方案2】:

    扩展运算符使用Object 作为构造函数创建一个新对象。因此,在您的情况下,personCopy 不是 Person 类的实例,因此,它的 __proto__ 不是 Person.prototype,因此 getter 将不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-11
      • 2018-09-04
      • 1970-01-01
      • 2023-02-25
      • 2021-01-15
      • 2017-03-17
      • 2020-10-04
      • 2018-05-13
      相关资源
      最近更新 更多