如何从调用函数的对象中获取对象?

时间:2019-06-15 07:04:18

标签: javascript function object ecmascript-6

这是我最难回答的问题之一。 我正在尝试创建一个函数,该函数可以检测从什么对象和什么属性中调用了该函数。该函数必须适用于任何方法或任何类的任何属性。这是我的目标:

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_Ifunction show() { window.print("<input type="text" name="grade">") } 代替什么?

2 个答案:

答案 0 :(得分:1)

不可能。
即使可以获得函数的上下文(this),也将无法获得该上下文的上下文。

我相信您正在尝试使用错误的方法来解决某些问题。
能否请您分享一下您的初步想法。您为什么决定获得那些???

答案 1 :(得分:0)

这实际上是不可能的-除非选择使用非标准的Function.caller属性(请检查兼容性表),否则您需要使用(例如)代理对象。