var err1 = Error('message');
var err2 = new Error('message');有什么关系呢?在chrome控制台中查看它们,它们看起来是一样的。对象上的相同属性和相同的__proto__链。看起来Error就像一个工厂。
哪一个是正确的?为什么?
发布于 2012-11-09 01:43:22
两者都很好;这是在the specification中显式声明的
...因此,函数调用
Error(…)等同于具有相同参数的对象创建表达式new Error(…)。
发布于 2012-11-09 01:46:17
Error的行为确实像一个工厂,就像其他一些本机构造函数一样:Array、Object等都会检查类似if (!(this instanceof Array)) { return new Array(arguments); }的东西。(但请注意,String(x)和new String(x)非常不同,Number和Boolean也是如此。)
也就是说,在出现错误的情况下,甚至不需要抛出Error对象...throw 'Bad things happened';也可以工作
您甚至可以抛出一个用于调试的对象文字:
throw {message:"You've been a naughty boy",
context: this,
args: arguments,
more:'More custom info here'};https://stackoverflow.com/questions/13294658
复制相似问题