我有一个通过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;
//...
}
}
编辑
我想获取我的方法的调用者所属的类。
答案 0 :(得分:0)
我认为您的问题分为两个部分:
您遇到的第一个障碍是试图确定谁调用了该函数。我知道您说您正在使用Function.caller,但是该功能已被弃用。即使已在大多数浏览器中当前支持该功能,但在不赞成使用的功能之上构建代码似乎也不是一个好主意。因此,您可以退后一步,并询问您为什么关心谁调用了该函数。日志记录用例是一个很好的用例(即,您想记录添加日志条目的类),但是我想不出许多其他用例。对于日志记录用例,您可能只需要在函数中添加一个参数,以允许调用者传递其名称。如果您不愿意这样做,则可以尝试使用此处描述的错误抛出技术,但是我无法担保:https://stackoverflow.com/a/29572569/11300565
问题的第二个(也是主要的)部分(如果可以找到呼叫者,那么如何确定它是否是一类?)没有很好的答案。一种方法是使所有类都从某个基类继承,然后在该基类(MyBaseClass.isInstanceOfMe(unknownObject)
)上提供您可以使用的静态typeguard。除了自己实现某些功能外,我不知道检测打字稿类的内置方法,因为它们会在一天结束时被编译为javascript,很难与对象和函数区分开。