如何从ES6 JavaScript类实例获取源代码位置?

时间:2019-04-18 13:59:00

标签: javascript reflection code-generation classloading

我想从我的对象树中生成一些代码。为了生成所需的import语句,我需要从类实例中查找给定类的源代码位置。

我已经可以通过

获得预期的名称MyClass
var name = instance.constructor.name;

但不是源代码位置

'/src/package/myClass.js'

=>如何这样做?

对于Java,其工作方式如下所述:

Find where java class is loaded from

如果我使用dir(constructor)在Chrome开发人员工具中检查构造函数,我会看到一些属性

[[FunctionLocation]]: myClass.js:3

,如果我将鼠标悬停在其上,则可以看到所需的路径。如何以编程方式获取该财产?

enter image description here

修改

刚刚发现[[FunctionLocation]]无法访问:

Access function location programmatically

2 个答案:

答案 0 :(得分:1)

document.currentScript在IE以外的所有浏览器中均可使用。您可以像这样使用它:

var script = document.currentScript;
var fullUrl = script.src;

答案 1 :(得分:0)

可能的解决方法是致电

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