【问题标题】:Typescript - Get class of caller of methodTypescript - 获取方法调用者的类
【发布时间】: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;

      //... 
    }
  }

编辑

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

【问题讨论】:

标签: typescript


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-12-19
    • 1970-01-01
    • 2013-04-24
    • 2015-09-16
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多