Typescript - 获取方法调用者的类

Posted

技术标签:

【中文标题】Typescript - 获取方法调用者的类【英文标题】:Typescript - Get class of caller of method 【发布时间】:2019-10-15 05:47:42 【问题描述】:

我有一个函数通过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;

      //... 
    
  

编辑

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

【问题讨论】:

你能添加一些你想要实现的代码吗? @GetOffMyLawn 添加了一些代码。它是否阐明了我正在尝试的内容? Is it possible to get the caller context in javascript?的可能重复 也可能与***.com/questions/280389/…重复 【参考方案1】:

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

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

你的问题的第二部分(也是主要部分)(如果你能找到来电者,你怎么知道它是否是一个班级?)没有一个好的答案。一种方法是让您的所有类都从某个基类继承,然后在该基类 (MyBaseClass.isInstanceOfMe(unknownObject)) 上提供您可以使用的静态 typeguard。除了自己实现一些东西之外,我不知道检测 typescript 类的内置方法,因为它们在一天结束时被编译成 javascript,并且很难与对象和函数区分开来。

【讨论】:

以上是关于Typescript - 获取方法调用者的类的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 AutoClosable 警告传播到 Java 中的类调用者?

如何使用inspect从Python中的被调用者那里获取调用者的信息?

在 C# 的扩展方法中为调用者变量赋值

QScriptEngineAgent - 获取被调用者名称

masstransit请求/响应:在消费者中获取调用者超时

//实现单例模式的类