代码之家  ›  专栏  ›  技术社区  ›  Peter_101

如何获取javascript错误的原型成员对象键?[副本]

  •  0
  • Peter_101  · 技术社区  · 5 年前

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

    当我捕捉到一个错误时,我遇到了这个问题,我不知道控制台输出是否以这种方式运行,因为错误类/type/。。。。

    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__)) 应返回“['name',”消息“…”。只是想知道我做错了什么。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Amadan    5 年前
    Object.getOwnPropertyDescriptor(ex.__proto__, "name")
    # => {value: "Error", writable: true, enumerable: false, configurable: true}
    

    不可枚举的属性不显示在 Object.keys .

        2
  •  2
  •   CertainPerformance    5 年前

    出于某种原因 name message 上的属性不可枚举 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)));
    }