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"}