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 中的类调用者?