我在Firefox和chrome&Node.js中尝试了以下代码:
Error.constructor.call({}, 'specified string'); // Uncaught SyntaxError: Unexpected identifier
Error.constructor.call({}, 'specified '); // work well
Error.constructor.call({}, 'specified'); // work well
我想知道JS解释器给我该错误的原因。看来eval()是用第二个参数调用的,但是我真的不知道发生了什么。
答案 0 :(得分:3)
首先,Error.constructor
实际上是Object.constructor
:
> Error.constructor === Object.constructor
true
第二,Object.constructor
可用于创建函数:
> f = Object.constructor('foo', 'bar', 'return "hello " + foo + " and " + bar;')
[Function: anonymous]
> f('Alice', 'Bob')
'hello Alice and Bob'
最后一个参数是函数主体,而先前的参数是函数参数。
最后,您的代码:
Error.constructor.call({}, 'specified string');
表示您正在调用Object.constructor
以创建具有函数主体specified string
的函数。函数主体specified string
是一段无效的JavaScript代码,因此是错误。
答案 1 :(得分:0)
杨,我可能会误解您的问题,但是如果您只想抛出一个错误,可以使用
throw new Error('Something is broken')
,因为在这种情况下也会调用Error构造函数,因此您无需显式使用.call,因为您始终不会在其中传递任何上下文。
希望这会有所帮助。