问题描述
我正在尝试理解语法,但是对我来说,这一切都是新的。我在匿名函数中看到一个匿名函数,后跟一个逗号和一个类。请帮助我理解语法。
{
"versions": [
"0.1.0","0.1.1",...
]
}
解决方法
首先,这是无效的语法:NavigationMixin
后应加一个等号以使之有效。
第二,此代码引用未定义的变量a
和i
。
让我们分解一下:
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
的值确定,并且它也是一个函数。
最后,逗号运算符计算两个操作数,并忽略第一个操作数的值,然后返回第二个操作数的值。因此,整个函数(在执行时)将返回一个类,该类使用两个方法扩展了给定的类,该方法的名称由两个变量a
和i
动态确定。
代码没有提供关于这两个变量的线索。