我正在慢慢地努力理解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对象的实例?
谢谢!
答案 0 :(得分:1)
您可以在投掷它的同一行指定error.name
。
如果赋值的右侧是一个真正的值(非空字符串),则赋值语句将是真实的,这意味着您可以使用&&
继续运行。最后一个真实的陈述将在该行的开头发送回throw
并将被抛出。
var error = new Error('The value is invalid');
throw (error.name = 'ArgumentException') && error;
如果不创建自己的Error类,并将name
设置为ArgumentException,那么在不使用立即调用函数表达式(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方式创建对象(注意prototype
和constructor
)。注意有一些限制(特定于类型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?