JavaScript:将内部函数的名称设置为分配给它的变量的名称

JavaScript:将内部函数的名称设置为分配给它的变量的名称,javascript,Javascript,我试图进行一些合成,并使用函数名在对象中指定一个键。因此,我有一个高阶函数,类似这样: function doThing(fn) { return function (...args) { return fn(...args); }; } 我将外部函数的结果赋给一个变量: var coolThing = doThing(someFunction); 我希望coolThing.name等于'coolThing' 现在我很确定这是不可能的,因为一旦返回内部函数,名称就被设置为空

我试图进行一些合成,并使用函数名在对象中指定一个键。因此,我有一个高阶函数,类似这样:

function doThing(fn) {
  return function (...args) {
     return fn(...args);
  };
}
我将外部函数的结果赋给一个变量:

var coolThing = doThing(someFunction);
我希望coolThing.name等于'coolThing'

现在我很确定这是不可能的,因为一旦返回内部函数,名称就被设置为空字符串,并且不能再更改。但我想知道我是否可以优雅地让类似的东西工作,而不绕过lexer或任何可怕的东西

仅仅用另一个函数包装doThingsomeFunction就可以让它工作,但这并没有让它比我开始使用的更好

它不必是我正在使用的name属性,但是函数需要有一些属性,这些属性从变量的名称中获取它的值

有什么想法吗,还是我在这里太可爱了

我敢肯定那是不可能的


你说得对。变量名不能通过编程方式访问,当然也不能在doThing中访问。即使对于函数声明和分配的匿名函数表达式,隐式分配的.name属性也是运行时从源文本中提取的,用于这些语法构造。它不能被截取,无论如何只能用于调试目的。

所以在doThing内部,您认为可以获得变量coolThing的名称吗?我对此表示怀疑……我猜您不想将name作为另一个参数传递给doThingIt,它不必是name属性-您可以将任何自定义属性分配给您喜欢的函数,例如,coolThing.myName=coolThing,如果您将函数名作为另一个参数传递给doThing函数,您可以在doThing函数内部执行此操作,或者使用已传递的函数名作为参数。但是,如果您创建了其他一些引用相同函数的变量,比如anotherVar=coolThing,您会发现anotherVar.myName仍然等于coolThing。