如何列出类中的回调

时间:2017-01-06 13:07:48

标签: javascript typescript

我想知道是否有可能在课程中列出回调?

我已尝试过此处列出的答案:Get functions (methods) of a class

但他们没有列出回调。

export default class Foo {
    public myCallback: () => void;
    private readonly bar: any;

    constructor() {
        console.log(Object.getOwnPropertyNames(this).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(this))​));   
        // [ 'bar', 'constructor', 'biz' ]
        // 'myCallback' is not listed.
     }

    public biz() {
    }
}

1 个答案:

答案 0 :(得分:1)

这是因为编译器生成了javascript代码的方式。

由于myCallback属性从未设置过,因此它会优化代码并在javascript中输出任何内容。

 var Foo = (function() {
   function Foo() {
     // no my callback property is generated since it's never used
    console.log(Object.getOwnPropertyNames(this).concat(Object.getOwnPropertyNames(Object.getPrototypeOf(this))));

   }
   Foo.prototype.biz = function() {};
   return Foo;
 }());

但是,如果在运行时您实际设置了该属性,它将存在。像这样。

class Foo {
  public myCallback: () => void;
  private readonly bar: any;

  constructor() {

  }

  public logMethods() {
    var props = [];
    let obj = this;
    do {
      props = props.concat(Object.getOwnPropertyNames(obj));
    } while (obj = Object.getPrototypeOf(obj));

    props.forEach(method => console.log(method));
  }
}


let a = new Foo();
a.myCallback = () => console.log('abc');

a.logMethods();

您可以看到工作示例here