動的な名前で関数を作成するにはどうすればよいですか?何かのようなもの:
function create_function(name){
new Function(name, 'console.log("hello world")');
}
create_function('example');
example(); // --> 'hello world'
また、オブジェクトのプロトタイプを変更できるように、関数は関数オブジェクトである必要があります。
window.example = function () { alert('hello world') }
example();
または
name = 'example';
window[name] = function () { ... }
...
または
window[name] = new Function('alert("hello world")')
私は過去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"}