什么是Javascript中的虚拟Getter和Setter?

Max*_*ian 2 javascript getter-setter async-await

虚拟获取器和设置器背后的想法是什么?我们为什么需要它们?

我在观看教程时正在编写以下代码:

login: async args => {
  const user = await User.findOne(args.email)
  if (!user) {
    throw new Error("Email doesn't exist!")
  }
  const isEqual = await bcrypt.compare(args.password, user.password)
  if (!isEqual) {
    throw new Error("Wrong Password!")
  }
  jwt.sign({userId: user.id})
}
Run Code Online (Sandbox Code Playgroud)

我在这里使用一个虚拟的吸气剂来提取,user.id但是我真的不明白这里发生了什么。

我在用猫鼬。

Dav*_*ton 8

这里什么都没有进行,您正在获得的id属性user

“虚拟属性”(无论如何通常在JS中定义)是一个看起来像属性的属性,但是可以(通过设置,获取或同时计算)进行计算。

如果要在设置或获取属性时执行其他逻辑,则需要“需要”它们,以获取各种“需要”值:您从不需要它们,但可能需要它们,有时它们很棒。

过度使用getter / setter 可能会带来不利影响,例如(至少AFAIK)您不能创建getter或setter async,这在某些情况下可能会出现问题,例如Mongoose的set功能会变成属性setter ,但您不能使其异步:https : //github.com/Automattic/mongoose/issues/2571