为了账号安全,请及时绑定邮箱和手机立即绑定

下面的代码片段是什么意思?

下面的代码片段是什么意思?

梦里花落0921 2023-04-01 17:23:36
我试图理解语法,但对我来说这一切都是新的。我在匿名函数中看到一个匿名函数,后面跟着一个逗号和一个类。请帮助我理解语法..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)}})
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

首先,这是无效的语法: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)。匿名函数以 as 参数执行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。


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


查看完整回答
反对 回复 2023-04-01
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信