【发布时间】:2019-06-15 07:04:18
【问题描述】:
这是我的一个难以回答的问题。 我正在尝试创建一个函数,该函数可以检测到它被调用的对象和属性。该函数必须适用于任何类的任何方法或任何属性。这是我的目标:
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脚本的内置类。
我可以在WHO_AM_I 方法中使用this。这将使我获得对调用 WHO_AM_I 方法的属性或方法的引用。但真正的问题是如何获得定义此方法或属性的类?我想不通。 super 没有帮助,因为它指向项目的父对象,而不是定义项目的对象。另外,除非项目是方法,否则我无法获取项目的名称,在这种情况下,我可以使用this.name 来获取方法的名称。还有我卡住的地方。我能先解决这个问题吗?如果我输入this.name,则在WHO_AM_I 方法中标记,但它仅在我在另一个方法上调用WHO_AM_I 方法时才有效,而不是在类的属性上。但我不能解决这个问题一秒钟??问号。
所以我的问题是:
是否可以在 javascript 中找出定义了哪个类方法?
如果是的话,我应该在我的WHO_AM_I 方法中用什么代替? 和?? 我注入java 脚本对象类以产生我想要的输出?
【问题讨论】:
-
默认情况下这是不可能的,函数和对象不知道它们的位置。虽然,您也许可以使用反射或代理来明确设置父感知对象developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript function object ecmascript-6