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或使用变量,因此它不是一个真正的限制,而是对语言本身的好奇心.我检查了规范,但是在这种情况下找不到任何暗示应该抛出错误的东西,所以很可能我错过了什么.
根据 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 )。NewExpression是MemberExpression的形式,而 MemberExpression 是SuperProperty的形式,而 SuperProperty 是super的形式。标识符名称。ES6标准似乎也是这么说的。所以在我看来 MDN 是正确的,因此 Firefox 和 Edge 符合该规范。
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |