Javascript:动态函数名

Javascript:动态函数名,javascript,function,dynamic,Javascript,Function,Dynamic,如何创建具有动态名称的函数?比如: function create_function(name){ new Function(name, 'console.log("hello world")'); } create_function('example'); example(); // --> 'hello world' 另外,函数应该是一个函数对象,这样我就可以修改对象的原型 window.example = function () { alert('hello world')

如何创建具有动态名称的函数?比如:

function create_function(name){
   new Function(name, 'console.log("hello world")');
}
create_function('example');
example(); // --> 'hello world'
另外,函数应该是一个函数对象,这样我就可以修改对象的原型

window.example = function () { alert('hello world') }
example();


在过去的3个小时里,我一直在使用这个功能,最终使用其他线程上建议的新功能获得了它,至少有点优雅:

/**
 * JavaScript Rename Function
 * @author Nate Ferrero
 * @license Public Domain
 * @date Apr 5th, 2014
 */
var renameFunction = function (name, fn) {
    return (new Function("return function (call) { return function " + name +
        " () { return call(this, arguments) }; };")())(Function.apply.bind(fn));
};   

/**
 * Test Code
 */
var cls = renameFunction('Book', function (title) {
    this.title = title;
});

new cls('One Flew to Kill a Mockingbird');
如果运行上述代码,您将看到控制台的以下输出:

Book {title: "One Flew to Kill a Mockingbird"}

你能解释一下你想解决什么问题吗?@Philipp:例如,OP可能有兴趣用另一个构造函数替换某个构造函数,但给它与原始构造函数相同的名称,因此代码会看到相同的函数名。这可能是我面临的原因之一。但我肯定还有其他人。在你的回答中。我不知道为什么错误的答案是高等级。作者在运行时需要一个命名函数,而不是全局名称来访问。下面的帖子是更好的方法,还是这篇?@EhsanSajjad我的回答和ConnorBlack的回答是一样的。区别在于他将函数对象存储在变量中,而我将其存储在
窗口
对象中,只是为了证明如果使用
窗口
,您可以随时随地访问函数。我更喜欢下面的答案,因为它不会污染全局范围。
/**
 * JavaScript Rename Function
 * @author Nate Ferrero
 * @license Public Domain
 * @date Apr 5th, 2014
 */
var renameFunction = function (name, fn) {
    return (new Function("return function (call) { return function " + name +
        " () { return call(this, arguments) }; };")())(Function.apply.bind(fn));
};   

/**
 * Test Code
 */
var cls = renameFunction('Book', function (title) {
    this.title = title;
});

new cls('One Flew to Kill a Mockingbird');
Book {title: "One Flew to Kill a Mockingbird"}