繁体   English   中英

下面的片段是什么意思?

[英]What does the below snippet mean?

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

e => (function(e) {
if ("function" != typeof e.prototype.dispatchEvent) throw new TypeError(`${e} must be an Element type`)
}(e), class extends e {
[i](e, t) {
    n.getService(this).navigateTo(e, {
        replace: t
    })
} [a](e) {
    return n.getService(this).generateUrl(e)
}
})

首先,这是无效的语法: NavigationMixin后面应该跟一个等号才有效。

其次,这段代码引用了未定义的变量ai

让我们分解一下:

NavigationMixin是一个接受一个参数的函数: e ,它应该是一个类/构造函数,它是或继承自Element 该函数是一个使用箭头表达式语法的箭头函数,这意味着没有块,也没有 return 语句。 =>后面的表达式计算为返回值。

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

(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动态确定。

代码没有给出关于这两个变量的线索。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM