以下代码段是什么意思?

问题描述

我正在尝试理解语法,但是对我来说,这一切都是新的。我在匿名函数中看到一个匿名函数,后跟一个逗号和一个类。请帮助我理解语法。

{
  "versions": [
    "0.1.0","0.1.1",...
  ]
}

解决方法

首先,这是无效的语法:NavigationMixin后应加一个等号以使之有效。

第二,此代码引用未定义的变量ai

让我们分解一下:

NavigationMixin是一个带有一个参数的函数:e,它应该是一个继承自Element的类/构造函数。该函数是使用箭头表达式语法的箭头函数,表示没有任何块,也没有返回语句。 =>之后的表达式计算得出返回值。

表达式由逗号运算符组成。该运算符的左操作数为:

(function(e) {
  if ("function" != typeof e.prototype.dispatchEvent) throw new TypeError(`${e} must be an Element type`)
}(e)

这是所谓的“立即调用函数表达式”(IIFE)。匿名函数以e作为参数执行,并且显然可以对e执行验证。该函数不返回任何东西,也没有用。唯一的目的是在验证未通过的情况下触发错误。

然后我们移到逗号运算符的第二个操作数:

class extends e {
  [i](e,t) {
    n.getService(this).navigateTo(e,{
        replace: t
    })
  } 
  [a](e) {
    return n.getService(this).generateUrl(e)
  }
})

这是一个类表达式。它在原型上定义了两个成员。这些成员具有计算得出的名称,这就是为什么它们使用[]语法的原因:i的值确定第一个成员的名称,并且它的值是一个函数:

(e,t) {
  n.getService(this).navigateTo(e,{
      replace: t
  })
}

原型中的第二个成员也具有一个动态名称,该名称由a的值确定,并且它也是一个函数。

最后,逗号运算符计算两个操作数,并忽略第一个操作数的值,然后返回第二个操作数的值。因此,整个函数(在执行时)将返回一个类,该类使用两个方法扩展了给定的类,该方法的名称由两个变量ai动态确定。

代码没有提供关于这两个变量的线索。