“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
答案 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!')
}