gpt4 book ai didi

javascript - 获取 JavaScript 类构造函数的源代码

转载 作者:行者123 更新时间:2023-12-05 06:07:53 24 4
gpt4 key购买 nike

我需要创建一个方法 GetCode 返回一个字符串,其中包含任何类的构造函数的源代码。例如,

let code = GetCode (class CX {
constructor () {
this.x = 1
this.y = 1
this.fx ()
this.fy ()
}
fx () {}
fy () {}
})

应该在 code 变量中返回一些与此类似的内容:

`
this.x = 1
this.y = 1
this.fx ()
this.fy ()
`

对于 fxfy 等常规方法,一个简单的 .toString 调用就足够了。但是当在构造函数上完成时,返回的字符串是类的整个文本而不是函数的内部源代码。我试图解析 CX.toString () 返回的字符串,以使用 JSCodeShift 等工具准确获取我需要的文本片段,但指纹太重(5Mb ).

我想知道是否有可能设计一个 hack 来获取包含我需要的源代码的字符串。

其他示例:

let code = GetCode (class CX {
constructor ({ min, max }) {
if (min < max) {
for (let x = min; x < max; x++) {
console.log (x)
}
}
this.min = min
this.max = max
}
fmin () { return this.min }
fmax () { return this.min }
})

最佳答案

所以,我得到了解决方案。请按照以下步骤 -

  1. 获取类并使用 toString() 将其转换为字符串。
  2. 使用正则表达式获取结果字符串的 constructor 部分。
  3. 将子字符串分解为数组。执行 pop()shift() 删除数组中不需要的部分。
  4. 最后,将数组作为字符串加入。

下面的代码片段解释了一切——

console.log(getCode(class CX {
constructor () {
this.x = 1;
this.y = 1;
this.fx ();
this.fy ();
}
fx () {}
fy () {}
}));

console.log(getCode(class CX {
constructor ({ min, max }) {
if (min < max) {
for (let x = min; x < max; x++) {
console.log (x)
}
}
this.min = min
this.max = max
}
fmin () { return this.min }
fmax () { return this.min }
}));

function getCode(inputClass){
let regx = /constructor[\s\S]+?(?=}\n[A-Za-z\s\*]*\(\)[\s]*{)/g;
let code = inputClass.toString();
let arr = code.match(regx)[0].split("\n");
arr.pop();
arr.shift();
return arr.join("\n");
}

关于javascript - 获取 JavaScript 类构造函数的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65293173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com