Javascript:动态函数名称

Ada*_*dam 14 javascript function dynamic names

如何使用动态名称创建函数?就像是:

function create_function(name){
   new Function(name, 'console.log("hello world")');
}
create_function('example');
example(); // --> 'hello world'
Run Code Online (Sandbox Code Playgroud)

函数也应该是一个Function Object,所以我可以修改对象的原型.

Nat*_*ero 14

我在过去的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');
Run Code Online (Sandbox Code Playgroud)

如果您运行上面的代码,您应该看到以下输出到您的控制台:

Book {title: "One Flew to Kill a Mockingbird"}
Run Code Online (Sandbox Code Playgroud)


ako*_*nsu 12

window.example = function () { alert('hello world') }
example();
Run Code Online (Sandbox Code Playgroud)

要么

name = 'example';
window[name] = function () { ... }
...
Run Code Online (Sandbox Code Playgroud)

要么

window[name] = new Function('alert("hello world")')
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么错误的答案是高等级.作者需要在运行时使用命名函数,而不是要访问的全局名称. (9认同)