Typescript - 无法列出Object上的方法

时间:2017-08-09 10:50:05

标签: typescript introspection

我有一个这样的课程:

export class A {

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

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

}

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

1 个答案:

答案 0 :(得分:2)

那是因为在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"]