带有前缀运算符的new.target

Mic*_*per 5 javascript safari webkit ecmascript-6

"new.target属性允许您检测是否使用new运算符调用了函数或构造函数" [1]

new.target如果未使用new以下函数调用函数,我可以在if语句中使用以抛出错误:

if(!new.target){
    throw new Error('Must be called with new keyword!')
}
Run Code Online (Sandbox Code Playgroud)

然而,野生防止new.target从与正在使用!以这种方式,与所述错误消息

new.target不能在前缀运算符后出现

在Webkit中跟踪了这一行.

但是可以检查正面条件!

if(new.target){}
else{
    throw new Error('Must be called with new keyword!')
}
Run Code Online (Sandbox Code Playgroud)

这是safari的解析引擎的错误吗?或替代,应该我是用new.target在他们执行的方法是什么?

简单的repro:https://codepen.io/mdjasper/pen/eEWORY edit = 0012


编辑:此问题已在webkit bugzilla上提交:https://bugs.webkit.org/show_bug.cgi?id = 157970

Mic*_*per 1

这个语法应该是支持的,并且确认错误是webkit的bug:

if(!new.target){
    throw new Error('Must be called with new keyword!')
}
Run Code Online (Sandbox Code Playgroud)

补丁已编写并合并,并将随 webkit 的未来版本一起发布

https://bugs.webkit.org/show_bug.cgi?id=157970#c17

在修复程序出现在发布版本之前,解决方法是显式检查new.target

if(new.target === undefined){
    throw new Error('Must be called with new keyword!')
}
Run Code Online (Sandbox Code Playgroud)