【问题标题】:Destructuring object passed like argument to a function [duplicate]解构对象像参数一样传递给函数[重复]
【发布时间】:2019-06-05 09:59:09
【问题描述】:

不知道 ES6 是否可行。 我正在一个项目中工作,该项目具有一个函数,该函数传递了一个具有许多属性的对象。现在代码如下:

function foo({arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8}){
   this.model = arg1;
   this.model = arg2;
   // and so on...
};
obj = {
    arg1: 'some',
    arg2: 'whatever',
    arg3: 'text'
    // and so on up to 8
    arg8: 'end text'
    }
foo(obj);

如果可能,Mi DESIRED 输出将是访问这样的参数:

function foo( {...args} ){ // not working
   this.model = arg1;
   this.model = arg2;
   // and so on...
};

obj = {
    arg1: 'some',
    arg2: 'whatever',
    arg3: 'text'
    // and so on up to 8
    arg8: 'end text'
    }
foo(obj);

所以问题是:函数有什么方法可以在单个 var (args) 中获取参数对象并将它们解构以准备使用?

【问题讨论】:

  • 似乎“在单个变量中”和“解构”是相反的。源对象要么被解构,要么没有。
  • 并非如此,因为在解构使用多少变量时必须明确。但是你为什么要这样做呢?将参数对象解构为每个键的新变量在功能上似乎与单独引用每个键相同 - 例如有(基本上)arg1 = args.arg1 后跟this.model = arg1 并且仅仅做this.model = args.arg1 在功能上是等效的,但是减少了一步。我想第二种方式(稍微)更冗长,但我不认为你在那里失去了太多清晰度。
  • 你可以将args分配给thisfunction foo(args) { Object.assign(this, args); }
  • @vlaz 你对点符号是正确的。我只是想知道我是否可以避免额外的“参数”。符号。也就是说,将 args.arg1、args.arg2 减少为:arg1 arg2 等等。但我明白你的意思
  • @NinaScholz 这也是一个好方法。不幸的是,并非所有属性都分配给一个唯一的对象(this.model)

标签: javascript ecmascript-6 object-destructuring


【解决方案1】:

有几种方法可以做到这一点。 第一个是将所有参数存储在一个变量中然后破坏它

function foo(...args){
  const  { arg1, arg2 } = args
   this.model = arg1;
   this.model = arg2;
   // and so on...
};

或者

function foo({ arg1, arg2 }){
   this.model = arg1;
   this.model = arg2;
   // and so on...
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2020-03-28
    • 2011-12-22
    相关资源
    最近更新 更多