打字稿-获取方法调用方的类

时间:2019-05-29 15:01:34

标签: typescript

我有一个通过Function.caller确定调用函数的函数。 是否可以确定呼叫者是否属于某个类,是否属于某个类等?

(我知道function.caller == null是它被调用的根级别。)

一些代码可能有助于理解我要实现的目标。

log(component: object, level: LogLevel, category: ILogCategory, message: string)
  {
    if(!component)
      let callingComponent = log.caller;
      // PSEUDOCODE
      if(parent of caller is class)
      callingComponent = class;

      //... 
    }
  }

编辑

我想获取我的方法的调用者所属的类。

1 个答案:

答案 0 :(得分:0)

我认为您的问题分为两个部分:

您遇到的第一个障碍是试图确定谁调用了该函数。我知道您说您正在使用Function.caller,但是该功能已被弃用。即使已在大多数浏览器中当前支持该功能,但在不赞成使用的功能之上构建代码似乎也不是一个好主意。因此,您可以退后一步,并询问您为什么关心谁调用了该函数。日志记录用例是一个很好的用例(即,您想记录添加日志条目的类),但是我想不出许多其他用例。对于日志记录用例,您可能只需要在函数中添加一个参数,以允许调用者传递其名称。如果您不愿意这样做,则可以尝试使用此处描述的错误抛出技术,但是我无法担保:https://stackoverflow.com/a/29572569/11300565

问题的第二个(也是主要的)部分(如果可以找到呼叫者,那么如何确定它是否是一类?)没有很好的答案。一种方法是使所有类都从某个基类继承,然后在该基类(MyBaseClass.isInstanceOfMe(unknownObject))上提供您可以使用的静态typeguard。除了自己实现某些功能外,我不知道检测打字稿类的内置方法,因为它们会在一天结束时被编译为javascript,很难与对象和函数区分开。