带有前缀运算符

时间:2017-08-08 22:09:56

标签: javascript safari ecmascript-6 webkit

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

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

if(!new.target){
    throw new Error('Must be called with new keyword!')
}

然而,safari阻止new.target以这种方式与!一起使用,并显示错误消息

  

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

之后

我将其追踪到this line in Webkit

但是可以检查阳性条件!

if(new.target){}
else{
    throw new Error('Must be called with new keyword!')
}

这是safari的解析引擎的错误吗?或者,应该我在执行方式中使用new.target

简单的重复:https://codepen.io/mdjasper/pen/eEWORY?editors=0012

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

1 个答案:

答案 0 :(得分:1)

应支持此语法,并确认错误是webkit错误:

if(!new.target){
    throw new Error('Must be called with new keyword!')
}

补丁已编写并合并,并将附带未来版本的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!')
}