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

标签 javascript function rename

我正在尝试更改 .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/

相关文章:

javascript - Discord.js Ping 号码的问题

javascript - jquery tablesorter 如何用图像对表格进行排序

c# - 在 C# 中查找大图像中的子图像

function - 我的函数返回一个结构;为什么编译器不允许分配给该结果值的字段?

linux - 如何在终端(LINUX)中重命名多个文件?

php - FORM(使用 Javascript)在 PHP 页面中不起作用!

javascript - 带有影响内部 ng-repeat 逻辑的外部 ng-repeat 项的嵌套 ng-repeat

c++ - 函数调用作为 C 宏的参数

laravel - 如何在 Laravel 7 中重命名项目

linux - 删除多个子目录中的部分文件名