实例化JavaScript错误对象实例
我正在慢慢地理解JavaScript的微妙之处。此时,我正在尝试实例化JavaScript错误对象的一个实例。我知道我可以做到以下几点:实例化JavaScript错误对象实例,javascript,Javascript,我正在慢慢地理解JavaScript的微妙之处。此时,我正在尝试实例化JavaScript错误对象的一个实例。我知道我可以做到以下几点: var error = new Error('The value is invalid'); error.name = 'ArgumentException'; throw error; var error = new Error().{ message:'The value is invalid', name:'ArgumentException'}; t
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;
然而,我试图找出/理解是否有一种方法可以将这个实例化浓缩到一行。例如,我想做如下事情:
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错误对象的实例
谢谢大家! 不久前,我按照Mozilla的建议创建了一个自定义的
错误对象。基本上,它以面向对象的方式创建对象(注意原型
和构造函数
)。注意:有一些限制(特定于类型的捕获
;请阅读我在下面提到的参考资料):
有关进一步资料:
Mozilla页面涉及以下问题(以及您必须注意的注意事项):
您可以在抛出错误时在同一行上指定error.name
如果赋值的右侧是truthy值,而您的是(非空字符串),则赋值语句将是truthy,这意味着您可以使用&&
继续运行。最后一条truthy语句将发送回行首的throw
,并将被抛出
var error = new Error('The value is invalid');
throw (error.name = 'ArgumentException') && error;
如果不创建自己的错误类并将name
设置为ArgumentException,那么在不使用立即调用的函数表达式(IIFE)生成一条block语句的情况下,您可以得到的语句就很少了
EDIT:adeneo正确地使用了一条IIFE语句,即使它作为一个块包含多条语句。我已经编辑了我的最后一段,将其包括在内。如果你真的想把所有内容都放在一行,你可以这样做
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'});
我不太喜欢它的样子,但我想这回答了你的问题。名属性继承自函数,所以在实例化一个错误对象时,你不能直接设置它。为什么把它压缩成一行会更好呢?请看一下单行程序的文档,最接近的是类似于throw(function(){var e=new Error(“Whoops!”);e.name='ArgumentException';return e;})()代码>这只是一个首选项,可以将其设置为一行。另外,我正在努力学习更多关于JavaScript语言的知识。这对于更大的代码库是很好的。侧栏中显示的链接答案添加了对构造函数中原始类的调用,IMO值得一读: