Javascript 如何在对象分解分配的左侧使用此选项?

Javascript 如何在对象分解分配的左侧使用此选项?,javascript,ecmascript-6,vuejs2,Javascript,Ecmascript 6,Vuejs2,(这个问题不是针对Vue的,但它是在Vue项目中,这就是为什么在函数和变量前面奇怪地使用This) 我有一个函数,它返回一个被分解为两个变量的对象: const { primaryNumber, typeOfExpression } = this.findPrimaryAndType( this.naturalExpressionYearOfBirth, this.gender, ); ({ primaryNumber: this.primaryNumber,

(这个问题不是针对Vue的,但它是在Vue项目中,这就是为什么在函数和变量前面奇怪地使用
This

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

  const { primaryNumber, typeOfExpression } = this.findPrimaryAndType(
    this.naturalExpressionYearOfBirth,
    this.gender,
  );
({
  primaryNumber: this.primaryNumber,
  typeOfExpression: this.typeOfExpression
} = this.findPrimaryAndType(
  this.naturalExpressionYearOfBirth,
  this.gender,
));
我不再希望变量是
primaryNumber
typeOfExpression
,我希望它们是
this.primaryNumber
this.typeOfExpression
,它们引用了我的视图数据部分

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

  this.primaryNumber = primaryNumber;
  this.typeOfExpression = typeOfExpression;
但这不是最好的方法!我该怎么办?如果我在
{}
中的变量前面添加
这个
,我会得到一个错误,如果我删除常量,它不会接受
=
谢谢。

您的解决方法是正确的(至少从纯Javascript的角度来看,不确定Vue如何处理这个问题)。您可以使用
对象使其略短。分配

const { primaryNumber, typeOfExpression } = this.findPrimaryAndType(
    this.naturalExpressionYearOfBirth,
    this.gender,
);
Object.assign(this, { primaryNumber, typeOfExpression });
Object.assign(this, this.findPrimaryAndType(
  this.naturalExpressionYearOfBirth,
  this.gender,
));
或者,如果要将所有返回的属性从
findPrimaryAndType
复制到当前实例,则可以完全跳过分解:

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

您可以详细说明分解目标,而不是隐式创建
const
变量:

  const { primaryNumber, typeOfExpression } = this.findPrimaryAndType(
    this.naturalExpressionYearOfBirth,
    this.gender,
  );
({
  primaryNumber: this.primaryNumber,
  typeOfExpression: this.typeOfExpression
} = this.findPrimaryAndType(
  this.naturalExpressionYearOfBirth,
  this.gender,
));
当然,这在简洁性方面没有多大帮助。如果结果对象上只有这两个属性,则可以使用
对象。分配

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

不知道可以将对象属性用作分解目标。我认为它必须是一个变量。@CodingTrigue它只能是变量声明中的一个变量,就像你不会做的那样
var this.prop=42
,但就像
this.prop=42
一样,在解构赋值中执行它也可以。