使用Javascript:动态函数名[复制]([removed] Dynamic function

2019-07-17 21:32发布

这个问题已经在这里有一个答案:

  • 在JavaScript动态功能的名称? 19个回答

如何创建一个动态名称的功能? 就像是:

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

另外,功能应该是一个函数对象,所以我可以修改对象的原型。

Answer 1:

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

要么

name = 'example';
window[name] = function () { ... }
...

要么

window[name] = new Function('alert("hello world")')


Answer 2:

我一直在玩弄这在过去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"}


文章来源: Javascript: Dynamic function names [duplicate]