这是我最难回答的问题之一。 我正在尝试创建一个函数,该函数可以检测从什么对象和什么属性中调用了该函数。该函数必须适用于任何方法或任何类的任何属性。这是我的目标:
Object.prototype.WHO_AM_I = function WHO_AM_I()
{
print("FUNCTION CALLED FROM: ? ITEM IN ?? CLASS.");
}
class CLASS
{
constructor()
{
this.PROPERTY = "";
}
METHOD()
{
return;
}
}
let OBJECT = new CLASS()
OBJECT.PROPERTY.WHO_AM_I();
OBJECT.METHOD.WHO_AM_I();
我想要此代码输出的是:
FUNCTION CALLED FROM PROPERTY ITEM IN CLASS CLASS.
FUNCTION CALLED FROM METHOD ITEM IN CLASS CLASS.
所以,我的目标是获取在其上调用函数WHO_AM_I
的方法或属性的名称以及在其中定义此项的类的名称。
示例2:
"TEST".substring.WHO_AM_I();
[].length.WHO_AM_I();
应输出:
FUNCTION CALLED FROM: substring ITEM IN String CLASS.
FUNCTION CALLED FROM length ITEM IN Array CLASS.
我希望你能明白。因此,我要做的是在整个javascript中创建的每个对象中注入WHO_AM_I
方法,并希望能够对整个javascript中任何方法或任何类的任何属性调用此方法,无论它是不是我的自己的类或Java脚本的内置类。
我可以在this
方法内使用WHO_AM_I
。这将为我提供对调用了WHO_AM_I
方法的属性或方法的引用。但是真正的问题是如何获取定义了此方法或属性的类?我不知道这一点。 super
无济于事,因为它指向项目的父对象,而不是指向定义项目的对象。另外,除非该项目是方法,否则我无法获得该项目的名称,在这种情况下,我可以使用this.name
获取该方法的名称。还有我卡住的地方。我首先能够解决这个问题?如果我将WHO_AM_I
放在this.name
方法中,则只能在WHO_AM_I
方法中标记,但这仅在我在另一个方法上调用?
方法而不是在类的属性上调用时有效。但是我不能解决这个问题一秒钟?完全没有问号。
所以我的问题是:
是否有可能在javascript中找出在哪个类方法中定义?
如果是的话,在注入Java脚本对象类以生成所需输出的??
方法中,应该用WHO_AM_I
和function show()
{
window.print("<input type="text" name="grade">")
}
代替什么?
答案 0 :(得分:1)
不可能。
即使可以获得函数的上下文(this
),也将无法获得该上下文的上下文。
我相信您正在尝试使用错误的方法来解决某些问题。
能否请您分享一下您的初步想法。您为什么决定获得那些?
和??
?
答案 1 :(得分:0)
这实际上是不可能的-除非选择使用非标准的Function.caller
属性(请检查兼容性表),否则您需要使用(例如)代理对象。