Как получить объект из какой функции был вызван? - PullRequest
0 голосов
/ 15 июня 2019

Вот один из моих трудных вопросов для ответа.Я пытаюсь создать функцию, которая может определить, от какого объекта и какого свойства он был вызван.Функция должна работать для любого метода или любого свойства любого класса.Вот какова моя цель:

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.

НадеюсьВы получите картину.Так что я делаю, чтобы внедрить метод WHO_AM_I в каждый объект, созданный во всем javascript, и хочу иметь возможность вызывать этот метод для любого метода или любого свойства любого класса во всем javascript независимо от того, является ли это мой собственный классили встроенный класс java-скрипта.

Я могу использовать this внутри WHO_AM_I метода.Это даст мне ссылку на свойство или метод, для которого был вызван метод WHO_AM_I.Но настоящая проблема в том, как мне получить класс, в котором определен этот метод или свойство?Я не могу понять это.super не помогает, поскольку указывает на родительский объект элемента, а не на объект, в котором определен элемент.Кроме того, я не могу получить имя элемента, если элемент не является методом, и в этом случае я могу использовать this.name, чтобы получить имя метода.И вот где я застрял.Я могу решить эту проблему для первого?Отметьте в WHO_AM_I метод, если я поставлю this.name, но он работает только в том случае, если я вызываю WHO_AM_I метод для другого метода, но не для свойства класса.Но я не могу решить эту проблему ни на секунду ??вопросительный знак вообще.

Итак, мой вопрос: возможно ли в javascript узнать, в каком классе определен метод?И если это так, что я должен поставить вместо ? и ?? в моем методе WHO_AM_I, который я внедрил в java-скрипты Класс объекта для получения нужного результата?

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Это невозможно.
Даже если вы сможете получить контекст (this) функции, вы не сможете получить контекст этого контекста.

Я полагаю, что выпытаясь решить какую-то проблему с неправильным подходом.
Не могли бы вы поделиться с вами своей первоначальной идеей.Почему вы решили получить эти ? и ???

0 голосов
/ 15 июня 2019

Это не совсем возможно - вам нужно использовать (например) объект Proxy, если вы не решите использовать нестандартное свойство Function.caller (см. Таблицу совместимости).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...