【问题标题】:Typescript - Cannot list methods over an Object打字稿 - 无法列出对象上的方法
【发布时间】:2017-08-09 10:50:05
【问题描述】:

我有这样的课程:

export class A {

    @Decorator()
    public a(): void {
        ...
    }

    @Decorator()
    public b(): void {
        ...
    }

}

稍后,有一个A 的实例(尽管作为Object 传入),我想列出它的所有方法。我认为 Reflect.ownKeys( aInstance: Object ) 可以给我想要的东西,但是来自函数的结果数组是空的。我做错了什么?

【问题讨论】:

    标签: typescript introspection


    【解决方案1】:

    这是因为在 javascript 中,方法是构造函数原型的一部分。

    如果您查看已编译的 javascript,更容易理解原因,例如:

    class A {
        public a(): void {}
    
        public b(): void {}
    }
    

    编译为:

    var A = (function () {
        function A() {
        }
        A.prototype.a = function () { };
        A.prototype.b = function () { };
        return A;
    }());
    

    所以:

    let a = new A();
    console.log(Object.keys(a)); // []
    console.log(Object.keys(a.constructor.prototype)); // ["a", "b"]
    console.log(Object.keys(A.prototype)); // ["a", "b"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多