新的super.constructor是JavaScript中的有效表达式吗?

GOT*_*O 0 7 javascript specifications super referenceerror new-expression

我想知道表单的表达式new super.SomeProperty在JavaScript中是否有效.

在处理跨浏览器行为不一致的代码时出现了这个问题,例如下面的代码段中的示例.

class Test {
    test() {
        return new super.constructor;
    }
}

console.log((new Test).test());
Run Code Online (Sandbox Code Playgroud)

这会在Firefox和Edge中打印一个空对象,但会ReferenceError在Chrome和一个SyntaxErrorSafari中抛出一个.错误可以很容易地绕过括号super.constructor或使用变量,因此它不是一个真正的限制,而是对语言本身的好奇心.我检查了规范,但是在这种情况下找不到任何暗示应该抛出错误的东西,所以很可能我错过了什么.

And*_*nyy 3

根据 MDN运算符优先级文章,不带参数列表的 new 低于成员访问权限。这表明new super.constructor应该评估为new (super.constructor)Firefox 和 Edge 是正确的。

现在,根据规格:

new super.constructor新的 NewExpression ( https://tc39.es/ecma262/multipage/ecmascript-language-expressions.html#sec-new-operator )。NewExpressionMemberExpression的形式,而 MemberExpression 是SuperProperty的形式,而 SuperProperty 是super的形式。标识符名称。ES6标准似乎也是这么说的。所以在我看来 MDN 是正确的,因此 Firefox 和 Edge 符合该规范。