代码之家  ›  专栏  ›  技术社区  ›  1.21 gigawatts

Javascript支持反射吗?我能得到一个对象扩展的类的列表吗?

  •  0
  • 1.21 gigawatts  · 技术社区  · 2 年前

    有没有办法获得对象在Javascript中扩展的类的列表?Javascript支持这样的反射吗?

    我找到了Reflect类,但无法从中获取任何类名信息。

    var element = document.createElement("textarea");
    console.log(element.nodeName); // TEXTAREA
    var proto = Reflect.getPrototypeOf(element);
    log(proto.name); // error
    

    var element = document.createElement("textarea");
    console.log("Name: " + element.nodeName);
    var object = Reflect.getPrototypeOf(element);
    console.log(object.nodeName); // error
    1 回复  |  直到 2 年前
        1
  •  2
  •   CertainPerformance    2 年前

    当前代码的问题在于 .nodeName Node.prototype.nodeName ,这是一个getter,但getter仅在 this (调用它的实例)是一个实际的元素。当 是其他东西,比如一个原型对象。

    要获得所有原型,您可以继续致电 Object.getPrototypeOf 重新分配原型,直到到达原型链的末端。

    要从每个原型对象中获取名称,假设它们是构造函数原型,您可以访问它们 .constructor.name 属性。

    let obj = document.createElement("textarea");
    const prototypes = [];
    while (obj = Object.getPrototypeOf(obj)) {
      prototypes.push(obj);
    }
    for (const proto of prototypes) {
      console.log(proto.constructor.name);
    }