2017-08-08 43 views
5

“的new.target属性让你检测功能或构造函数被调用使用new运算符” [1]new.target用一个前缀操作

我可以在使用new.target if语句如果抛出一个错误功能没有使用new称为:

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

然而,野生防止new.target从与以这种方式!被使用,并显示错误消息

前缀操作

我跟踪下来到this line in Webkit

new.target不能来。

然而,积极的条件可以检查!

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

出于好奇,如果你说'!(new.target)'会发生什么? – mhodges

+0

伟大的问题,没有想到这一点。试过了,但仍然出错:/ –

+0

男人,那太奇怪了。 [浏览器兼容表](https://kangax.github.io/compat-table/es6/)显示它在Safari中完全支持,但[MDN](https://developer.mozilla.org/en-US/) docs/Web/JavaScript/Reference/Operators/new.target)说不支持... – mhodges

回答

0

这句法应该得到支持,并确认了错误,而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!') 
}