Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实例化JavaScript错误对象实例_Javascript - Fatal编程技术网

实例化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

我正在慢慢地理解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'};
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值得一读: