我尝试通过扩展Error构造函数的原型来扩展JavaScript错误属性:
<script type="text/javascript">
// extending the Error properties to all the ones available in the various browsers:
Error.prototype = {
name: null, // (all browsers); the name of the error
message: null, // (all browsers); the error message as a string
description: null, // (Internet Explorer); description of the error
fileName: null, // (Firefox); the name of the file where the error occurred
lineNumber: null, // (Firefox); the number of line where the error occurred
columnNumber: null, // (Firefox); the number of column where the error occurred
number: null, // (Internet Explorer); the error code as a number
stack: null // (Firefox, Chrome); detailed information about the location where the error exactly occurred
};
function log(error) {
var errors = [];
for (var prop in error) {
errors.push(prop + ': ' + error[prop]);
}
alert(errors.join('\n'));
}
</script>
然后我测试日志功能:
<script type="text/javascript>
try {
var a = b; // b is undefined!
} catch(error) {
log(error);
}
</script>
结果是错误对象只显示一些属性(例如在 FirefoxfileName
和lineNumber
上columnNumber
),就像它没有被扩展一样。
但最奇怪的是,for...in
循环似乎无法遍历所有的错误对象属性:试图提醒标准属性error.message
通常会返回一条消息。
所以我的测试结果是:
- Error 构造函数不能像其他本地构造函数那样通过其原型进行扩展;
for...in
循环无法遍历错误对象的属性。
我对吗?
是否有一些有趣的证据/资源,您可以建议了解更多信息?