Javascript 能否将匿名方法(函数)动态转换为命名方法?

Javascript 能否将匿名方法(函数)动态转换为命名方法?,javascript,node.js,function,anonymous-function,v8,Javascript,Node.js,Function,Anonymous Function,V8,鉴于此方法: var obj = {}, obj.foo = function () {}; 是否可以在创建方法后为其指定一个名称,使其看起来类似于: var obj = {}, obj.bar = function bar() {}; obj.foo.<name> = Object.keys(obj)[0]; foo方法是匿名的,并分配给属性。将命名bar方法并将其指定给属性 能否将匿名foo方法动态转换为命名foo方法?函数对象上是否有可设置的属性或类似的属性: var o

鉴于此方法:

var obj = {}, obj.foo = function () {};
是否可以在创建方法后为其指定一个名称,使其看起来类似于:

var obj = {}, obj.bar = function bar() {};
obj.foo.<name> = Object.keys(obj)[0];
foo方法是匿名的,并分配给属性。将命名bar方法并将其指定给属性

能否将匿名foo方法动态转换为命名foo方法?函数对象上是否有可设置的属性或类似的属性:

var obj = {}, obj.bar = function bar() {};
obj.foo.<name> = Object.keys(obj)[0];
obj.foo.=对象键(obj)[0];
请不要使用jquery。此外,这在节点服务器应用程序中,因此跨浏览器问题无关紧要


编辑:对我有效的答案是丹尼尔的链接:。此方法还处理函数的参数。

您不能重新生成匿名函数的精确实例,但可以使用闭包来重新定义它更改其名称,如下所示:

var obj = {};

// Anonymous function
obj.foo = function() {/* whatever */};

// Renaming...
obj.foo = (function(fn) {
    return function foo() {
        return fn.apply(this, arguments);
    }
})(obj.foo);

// Now try in the console:
obj.foo
> function foo() {
    return fn.apply(this, arguments);
}

总结上述其他帖子中的两个解决方案:

(一)

(二)

他们都工作。第二个解决方案更复杂,但我还不确定它增加了什么


更新:第二种解决方案更好。它可以处理函数的参数,而第一个解决方案没有。

为什么需要这样的功能?除非您愿意获取函数的字符串值(即其JavaScript源代码),修改该值,然后从中生成新函数,否则无法实现这一点。你想完成什么?在
函数
表达式中给出的名称在函数外部无论如何都是不可见的;在不同的地方可能有对原始函数的引用。@ChrisGciso我正在测试,如果我发现了什么,我会告诉你的