【问题标题】:ES 6 new syntax about constES 6 关于 const 的新语法
【发布时间】:2017-02-10 07:06:32
【问题描述】:

我是 ES6 的新手,我知道某些事情,但对以下事情仍然有些困惑,谁能提供一些有关这些新语法的详细信息:

以下只是示例 sn-p 代码:

1. const { action, stage, conditions } = this.control.ajaxInfo; 

具体叫什么?这个语句到底会做什么?,我在控制台中尝试过它执行时没有任何错误。但是当我试图追踪这 3 个常量时,它显示未定义。

2. const getControlBindings = (control, context) => ({
    control,
    context,
    setAnswer,
    ajaxAction
  });

它是一个带有一些 = 和 => 符号的函数,那么这种类型的新语法呢:

getControlBindings((control, context) => {
    control,
    context,
    setAnswer,
    ajaxAction
})

那么这两种函数的主要区别是什么?请帮助我理解这一点。

【问题讨论】:

标签: javascript angularjs ecmascript-6


【解决方案1】:
  1. 是 ES2016/ES6 中 Object destructing 的例子。在此,3 个单独的 const 与等号左侧提到的同名参数的值。即动作、阶段、条件。

    var controls = {
        action: 'GET',
        stage: 'Test'
    }
    
    const { action, stage} = controls;
    
    console.log(action) // Outputs GET
    
  2. 是箭头函数的例子。在第一种情况下,你创建一个箭头函数 getControllsBinding,它接受控制和上下文参数并返回一个带有

    的对象
    {control,
     context,
     setAnswer,
     ajaxAction }
    

另一个定义就像您将箭头函数作为参数传递给 getControllsBinding 函数。请注意,这里有轻微的语法问题,您需要包装

    {control,
     context,
     setAnswer,
     ajaxAction }

下面的括号

    ({control,
     context,
     setAnswer,
     ajaxAction })

下面是一些从 ES2015/ES6 开始的好材料

箭头函数:https://leanpub.com/understandinges6/read#leanpub-auto-arrow-functions

对象破坏:https://leanpub.com/understandinges6/read#leanpub-auto-object-destructuring

【讨论】:

    【解决方案2】:

    1) 这意味着您的this.control.ajaxInfo 对象必须包含具有这些名称的属性,这些属性将被销毁为左侧的变量。 更多内容见Destructing object in JS

    var controls = {
      action: 'a',
      stage: 'b',
      conditions: 'c',
    }
    
    const { action, stage, conditions } = controls;
    
    console.log(action);

    2) 叫做arrow function。它们也是函数,但有一些细微差别。

    const getControlBindings = (control, context) => ({
        control,
        context,
        setAnswer,
        ajaxAction
      });
    

    这是一个函数,它接受参数 control 和 context 并返回一个具有形状的对象

    {
       control,
       context,
       setAnswer,
       ajaxAction
    }
    

    => 之后的所有内容都是箭头函数的主体。您可以使用

    向箭头函数添加括号主体
     const getControlBindings = (control, context) => { return ({
            control,
            context,
            setAnswer,
            ajaxAction
          }); };
    

    如果添加括号体,则需要显式使用return 语句,如果不添加括号体,则必须编写一个语句,该语句将从函数返回。

    【讨论】:

    • 谢谢@Suren Srapyan,很好的解释,它的意思是: 1. 这种语法从一个对象创建 3 个常量,对吗? 2. 此语法创建常量对象。
    • 1) 是,2) 否,它不会创建 const 对象,但会创建 const getControlBindings 函数,因此它不能再引用另一个函数。它附加到当前函数。返回的对象不会是 const
    • 我有点困惑,现在我明白了。谢谢@Suren Srapyan。
    • 2) 它们在 Javascript 中的任何地方都不称为 lambda。它们是箭头函数
    【解决方案3】:

    为您找到了一个好的read。希望对您有所帮助。

    更多关于destructuring

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 2019-09-07
      • 2011-12-19
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多