我怎样才能在对象解构赋值的左侧使用它?

时间:2018-06-01 12:29:18

标签: javascript ecmascript-6 vuejs2

(这个问题不是特定于Vue,而是在Vue项目中,这就是为什么在函数和变量前面奇怪地使用this。)

我有一个函数返回一个被解构为两个变量的对象:

  const { primaryNumber, typeOfExpression } = this.findPrimaryAndType(
    this.naturalExpressionYearOfBirth,
    this.gender,
  );

我不希望变量再次成为primaryNumbertypeOfExpression,我希望它们是this.primaryNumberthis.typeOfExpression,它们引用了我的视图数据部分。

我使用以下代码找到了一个糟糕的解决方法:

  this.primaryNumber = primaryNumber;
  this.typeOfExpression = typeOfExpression;

但这不是最佳方式!我该怎么办?如果我在this内的变量前添加{},我会收到错误,如果我删除了const,则不接受=谢谢。

2 个答案:

答案 0 :(得分:3)

您可以拼出解构目标,而不是隐式创建const变量:

({
  primaryNumber: this.primaryNumber,
  typeOfExpression: this.typeOfExpression
} = this.findPrimaryAndType(
  this.naturalExpressionYearOfBirth,
  this.gender,
));

当然,这在简洁性方面并不是很有帮助。如果这两个属性是结果对象上唯一的属性,则可以使用Object.assign

Object.assign(this, this.findPrimaryAndType(
  this.naturalExpressionYearOfBirth,
  this.gender,
));

答案 1 :(得分:0)

您的解决方法是执行此操作的正确方法(至少从纯Javascript角度来看,不确定Vue如何处理此问题)。您可以使用Object.assign

将其缩短一些
const { primaryNumber, typeOfExpression } = this.findPrimaryAndType(
    this.naturalExpressionYearOfBirth,
    this.gender,
);
Object.assign(this, { primaryNumber, typeOfExpression });

或者,如果您想将所有返回的属性从findPrimaryAndType复制到当前实例,则可以完全跳过解构:

const { naturalExpressionYearOfBirth, gender } = this;
Object.assign(this, this.findPrimaryAndType(naturalExpressionYearOfBirth, gender));