gpt4 book ai didi

Javascript重命名函数(不是变量名)

转载 作者:行者123 更新时间:2023-11-28 16:56:51 25 4
gpt4 key购买 nike

我正在尝试更改 .toString() 给出的函数名称,或创建一个具有新名称但主体相同的新函数。

function func() {}
func.toString() // returns 'function func() {}'
changename(func, "newname") // this is the functionality that I am trying to achieve
func.toString() // should now return 'function newname() {}'

我尝试使用Object.defineProperty(),它成功更新了func.name返回的值,但没有更新func.toString() .

Object.defineProperty(func, "name", {
value: "newname",
writable: true,
});
func.name // returns 'newname'
func.toString() // still returns 'function func() {}'

编辑:想要这样做的原因我需要使用一个未知名称的任意函数并将其写入一个已知名称的文件中,例如(使用nodejs):

const fs = require("fs");
changename(func, "newname");
fs.writeFileSync("tmp.js", func.toString());

tmp.js 包含:

function newname() {}

最佳答案

如果您需要做的就是将函数的代码写入文件,只需使用正则表达式将名称替换为您想要的任何名称:

let func = // whatever;

let funcCode = func.toString();
funcCode = funcCode.replace(/^function [^(]*(.*)$/, "function newName$1");

现在 funcCode 具有可以转储到文件中的文本。

更改实际函数对象的报告“名称”属性完全是另一回事,并且充其量是不可能或不切实际的。如果您只是使用函数的文本,那么这很简单。

关于Javascript重命名函数(不是变量名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58915446/

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