打字稿 - 无法列出方法在一个对象
问题描述:
我有一类这样的:打字稿 - 无法列出方法在一个对象
export class A {
@Decorator()
public a(): void {
...
}
@Decorator()
public b(): void {
...
}
}
后来,有,我想列出它的所有方法的A
实例(传递为Object
虽然)。我认为Reflect.ownKeys(aInstance: Object)
可以给我我想要的,但来自函数的结果数组是空的。我究竟做错了什么?
答
这是因为在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"]