Как получить местоположение исходного кода из экземпляра класса ES6 JavaScript? - PullRequest
0 голосов
/ 18 апреля 2019

Я хотел бы сгенерировать некоторый код из моего дерева объектов. Чтобы сгенерировать требуемые операторы импорта, мне нужно узнать местоположение исходного кода для данного класса из экземпляра класса.

Я уже могу получить ожидаемое имя MyClass с

var name = instance.constructor.name;

но не местоположение исходного кода

'/src/package/myClass.js'

=> Как это сделать?

Для Java это будет работать как описано здесь:

Найти, откуда загружен класс Java

Если я проверяю конструктор в инструментах разработчика Chrome с помощью dir (конструктор), я вижу некоторое свойство

[[FunctionLocation]]: myClass.js:3

и если я наведусь на него, я увижу нужный путь. Как я могу получить это свойство программно?

enter image description here

Редактировать

Просто обнаружил, что [[FunctionLocation]] недоступен:

Доступ к функции местоположения программно

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

document.currentScript работает во всех браузерах, кроме IE. Вы можете использовать это так:

var script = document.currentScript;
var fullUrl = script.src;
0 голосов
/ 18 апреля 2019

Возможно, можно обойти эту проблему, вызвав

determineImportLocation(){
    var stack = new Error().stack;
    var lastLine = stack.split('\n').pop();
    var startIndex = lastLine.indexOf('/src/');
    var endIndex = lastLine.indexOf('.js:') + 3;
    return '.' + lastLine.substring(startIndex, endIndex);
}

в конструкторе MyClass и сохранив его для последующего доступа:

constructor(name){
    this.name = name;
    if(!this.constructor.importLocation){
        this.constructor.importLocation = this.determineImportLocation();
    }                       
}

Однако потребуется изменитьвсе классы, которые я хотел бы import.Пожалуйста, дайте мне знать, если есть решение, которое не требует изменения самого класса.

enter image description here

...