实例化JavaScript Error对象实例

时间:2014-01-19 16:00:27

标签: javascript

我正在慢慢地努力理解JavaScript的微妙之处。这时,我正在尝试实例化JavaScript Error对象的实例。我知道我可以做到以下几点:

var error = new Error('The value is invalid');
error.name = 'ArgumentException';
throw error;

但是,我试图找出/理解是否有办法将这个实例化压缩到一行。例如,我想做类似以下的事情:

var error = new Error().{ message:'The value is invalid', name:'ArgumentException'};
throw error;

在设置消息和名称属性时是否可以实例化JavaScript Error对象的实例?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以在投掷它的同一行指定error.name

如果赋值的右侧是一个真正的值(非空字符串),则赋值语句将是真实的,这意味着您可以使用&&继续运行。最后一个真实的陈述将在该行的开头发送回throw并将被抛出。

var error = new Error('The value is invalid');
throw (error.name = 'ArgumentException') && error;

如果不创建自己的Error类,并将name设置为ArgumentException,那么在不使用立即调用函数表达式(IIFE)的情况下,可以获得的语句很少,只有一个块语句

编辑:adeneo正确地使用了一个IIFE,这是一个语句,即使它包含多个语句作为一个块。我编辑了我的最后一段以包含此内容。

答案 1 :(得分:1)

如果你真的想要一行中的所有内容,你可以做类似

的事情
var error = Object.defineProperty(new Error('The value is invalid'), 'name', {value: 'ArgumentException'});

您也可以将它扔在同一行

throw Object.defineProperty(new Error('The value is invalid'), 'name', {value: 'ArgumentException'});

我不是很喜欢它的样子,但我想这会回答你的问题。

答案 2 :(得分:0)

我刚刚按照Mozilla的建议创建了一个自定义Error对象。基本上它以OO方式创建对象(注意prototypeconstructor)。注意有一些限制(特定于类型catches;请阅读下面提到的资源):

// Create a new object, that prototypilly inherits from the Error constructor.
function MyError(message) {
  this.name = "MyError";
  this.message = message || "Default Message";
}
MyError.prototype = new Error(); 
MyError.prototype.constructor = MyError;

try {
  throw new MyError();
} catch (e) {
  console.log(e.name);     // "MyError"
  console.log(e.message);  // "Default Message"
}

try {
  throw new MyError("custom message");
} catch (e) {
  console.log(e.name);     // "MyError"
  console.log(e.message);  // "custom message"
}

了解更多信息: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Error

Mozilla页面引用了以下问题(您必须注意的警告): What's a good way to extend Error in JavaScript?