批量分配给多个 Javascript 对象

All*_*toc 5 javascript ecmascript-6

我实际上正在寻找一个有效的答案,类似于解构(参见https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

但我见过这个样本:

[a, b] = [1, 2];
Run Code Online (Sandbox Code Playgroud)

所以我希望是否有办法为多个对象属性进行批量分配,如下所示:

this.[name, age, is_male] = [ 'John Doe', 22, true ];
Run Code Online (Sandbox Code Playgroud)

为了缩短这个:

this.name = 'John Doe';
this.age = 22;
this.is_male = true;
Run Code Online (Sandbox Code Playgroud)

任何输入将不胜感激。

小智 5

一种不太完美的选择是:

const [name, age, is_male] = ['John Doe', 22, true];
Object.assign(this, {name, age, is_male});
Run Code Online (Sandbox Code Playgroud)

或者

Object.assign(this, 
  ([name, age, is_male]) => ({name, age, is_male}))(['John, Doe', 22, true]));
Run Code Online (Sandbox Code Playgroud)

这些似乎都不比三个赋值语句更好。

您要做的是将对象解构为一个对象(在这种情况下,您可以这样assignthis。为此提出了各种语法,例如

Object.assign(this,
  { [name, age, is_male] = ['John Doe', 22, true] });
Run Code Online (Sandbox Code Playgroud)

Object.assign(this,
  ['John Doe', 22, true].{name, age, is_male});
Run Code Online (Sandbox Code Playgroud)

但他们在语言标准过程中并没有得到太多关注。


tim*_*yRS 0

你不能做

this.[...
Run Code Online (Sandbox Code Playgroud)

因为这会给你一个

未捕获的语法错误:意外的标记 [

但您可以使用[]s 来分配this.-值:

[this.name, this.age, this.is_male] = ['John Doe', 22, true];
Run Code Online (Sandbox Code Playgroud)