Typescript - 无法在对象上列出方法
Typescript - Cannot list methods over an Object
我有一个 class 这样的:
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"]
我有一个 class 这样的:
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"]