我正在尝试进行一些合成,并且我使用函数名称在对象中指定了一个键。因此,我有一个更高阶函数的类似:
function doThing(fn) {
return function (...args) {
return fn(...args);
};
}
我将外部函数的结果赋给变量:
var coolThing = doThing(someFunction);
我希望coolThing.name
等于'coolThing'
。
现在我非常确定这是不可能的,因为一旦返回内部函数,名称将被设置为空字符串,并且不能再更改。但是我想知道我是否可以优雅地制作类似的东西而不会绕过词法分析器或类似的东西。
将doThing(someFunction)
与另一个函数包装起来可以使它工作,但最终使它不会比我开始时更好。
它不必是我正在使用的名称属性,但该函数需要具有一些属性,从变量名称中获取其值。
任何想法,还是我想在这里过于可爱?
答案 0 :(得分:1)
你是对的。变量名称无法以编程方式访问,并且肯定不在我很确定这是不可能的
doThing
内。即使对于函数声明和指定的匿名函数表达式,隐式赋值的.name
属性也是运行时从源文本中提取的属性,正是为了那些语法结构。它无法截获,无论如何都只能用于调试目的。