javascript - 如何获取 javascript 错误的原型(prototype)成员对象键?

标签 javascript prototype

如何获取 javascript 错误的原型(prototype)成员对象键?

当我捕获错误时,我遇到了这个问题,我不知道控制台输出是否会因为错误类/类型/....的特殊情况而表现出这种方式。

try {
  throw new Error('sample error')
} catch (ex) {
  console.log(ex instanceof Error)
  //true

  console.log(ex.message)
  //sample error

  console.log(Object.keys(ex))
  //[] fine as i suppose the class/type members exist in prototype

  console.log(ex.__proto__)
  //{name:'error', message:'', constructor:.... i suppose these are the default properties of Error

  console.log(Object.keys(ex.__proto__))
  //[] how come empty array still??? 
}

我想这是最后一句话console.log(Object.keys(ex.__proto__))应该返回['名称','消息'...]。只是想知道我做错了什么。

最佳答案

由于某种原因,namemessage 属性在 Error.prototype 上无法枚举。但是您可以使用Object.getOwnPropertyNames来获取属性列表,包括可枚举的和不可枚举的:

try {
  throw new Error('sample error')
} catch (ex) {
  console.log(Object.getOwnPropertyNames(ex.__proto__));
}

Object.keys 将返回一个仅包含可枚举(和自己的)属性的数组。

请注意,__proto__ 已弃用。最好使用 Object.getPrototypeOf 代替:

try {
  throw new Error('sample error')
} catch (ex) {
  console.log(Object.getOwnPropertyNames(Object.getPrototypeOf(ex)));
}

关于javascript - 如何获取 javascript 错误的原型(prototype)成员对象键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59463733/

相关文章:

javascript - 揭示原型(prototype)模式不适用于 Array

javascript - PHP jQuery HTML 表单插入到 MySQL 然后停留在同一页面上

javascript - 在 ExtJS 菜单项中添加按钮

Prototype 的 Ajax.Updater 导致 JavaScript 内存丢失?

javascript - 为什么 foo.hasOwnProperty ('__proto__' ) 等于 false?

javascript - 对数组元素进行编号的函数输出 "undefined"

javascript - 通过javascript继承

javascript - 在 Angular2 中使用 Protractor

javascript - 如何在 ChartJS 中跳过 x 轴标签

Javascript - 原型(prototype)数组打印测试错误