如何从 ES6 JavaScript class 实例获取源代码位置?
How to get source code location from ES6 JavaScript class instance?
我想从我的对象树中生成一些代码。为了生成所需的导入语句,我需要从 class 实例中找出给定 class 的源代码位置。
我已经能够使用
获得预期的名称 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]]无法访问:
document.currentScript 适用于除 IE 之外的所有浏览器。你可以这样使用它:
var script = document.currentScript;
var fullUrl = script.src;
一个可能的解决方法似乎是调用
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
的所有 classes。如果有不需要修改 class 本身的解决方案,请告诉我。
我想从我的对象树中生成一些代码。为了生成所需的导入语句,我需要从 class 实例中找出给定 class 的源代码位置。
我已经能够使用
获得预期的名称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]]无法访问:
document.currentScript 适用于除 IE 之外的所有浏览器。你可以这样使用它:
var script = document.currentScript;
var fullUrl = script.src;
一个可能的解决方法似乎是调用
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
的所有 classes。如果有不需要修改 class 本身的解决方案,请告诉我。