我想从我的对象树中生成一些代码。为了生成所需的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
,如果我将鼠标悬停在其上,则可以看到所需的路径。如何以编程方式获取该财产?
修改
刚刚发现[[FunctionLocation]]无法访问:
答案 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
。请让我知道是否有不需要修改类本身的解决方案。