下面的代码片段是什么意思?
What does the below snippet mean?
我正在尝试理解语法,但对我来说这一切都是新的。我在一个匿名函数中看到一个匿名函数,后面跟着一个逗号和一个 class。请帮助我理解语法..
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
后面应该跟一个等号才有效。
其次,这段代码引用了未定义的变量a
和i
。
让我们分解一下:
NavigationMixin
是一个接受一个参数的函数:e
,它应该是 class/constructor,它是或继承自 Element
。该函数是一个箭头函数,它使用箭头表达式语法,这意味着没有块,也没有 return 语句。 =>
后面的表达式计算为 returned 值。
表达式由逗号运算符组成。该运算符的左操作数是:
(function(e) {
if ("function" != typeof e.prototype.dispatchEvent) throw new TypeError(`${e} must be an Element type`)
}(e)
这是一个so-called“立即调用的函数表达式”(IIFE)。匿名函数以 e
作为参数执行,它显然用于对 e
执行验证。该函数没有 return 任何东西,也没有用。它的唯一目的是在验证未通过时触发错误。
然后我们转到逗号运算符的第二个操作数:
class extends e {
[i](e, t) {
n.getService(this).navigateTo(e, {
replace: t
})
}
[a](e) {
return n.getService(this).generateUrl(e)
}
})
这是一个class表达式。它在原型上定义了两个成员。这些成员具有计算名称,这就是它们具有 []
语法的原因: i
的值确定第一个成员的名称,它的值是一个函数:
(e, t) {
n.getService(this).navigateTo(e, {
replace: t
})
}
原型上的第二个成员也有一个动态名称,由a
的值决定,也是一个函数。
最后,逗号运算符计算两个操作数,并忽略第一个的值,returns 是第二个的值。所以整个函数——在执行时——returns 是一个 class,它使用两个方法扩展给定的 class,其名称由两个变量 a
和 i
.
代码没有给出关于这两个变量的线索。
我正在尝试理解语法,但对我来说这一切都是新的。我在一个匿名函数中看到一个匿名函数,后面跟着一个逗号和一个 class。请帮助我理解语法..
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
后面应该跟一个等号才有效。
其次,这段代码引用了未定义的变量a
和i
。
让我们分解一下:
NavigationMixin
是一个接受一个参数的函数:e
,它应该是 class/constructor,它是或继承自 Element
。该函数是一个箭头函数,它使用箭头表达式语法,这意味着没有块,也没有 return 语句。 =>
后面的表达式计算为 returned 值。
表达式由逗号运算符组成。该运算符的左操作数是:
(function(e) {
if ("function" != typeof e.prototype.dispatchEvent) throw new TypeError(`${e} must be an Element type`)
}(e)
这是一个so-called“立即调用的函数表达式”(IIFE)。匿名函数以 e
作为参数执行,它显然用于对 e
执行验证。该函数没有 return 任何东西,也没有用。它的唯一目的是在验证未通过时触发错误。
然后我们转到逗号运算符的第二个操作数:
class extends e {
[i](e, t) {
n.getService(this).navigateTo(e, {
replace: t
})
}
[a](e) {
return n.getService(this).generateUrl(e)
}
})
这是一个class表达式。它在原型上定义了两个成员。这些成员具有计算名称,这就是它们具有 []
语法的原因: i
的值确定第一个成员的名称,它的值是一个函数:
(e, t) {
n.getService(this).navigateTo(e, {
replace: t
})
}
原型上的第二个成员也有一个动态名称,由a
的值决定,也是一个函数。
最后,逗号运算符计算两个操作数,并忽略第一个的值,returns 是第二个的值。所以整个函数——在执行时——returns 是一个 class,它使用两个方法扩展给定的 class,其名称由两个变量 a
和 i
.
代码没有给出关于这两个变量的线索。