如何用動態名稱創建函數?例如:Javascript:動態函數名稱
function create_function(name){
new Function(name, 'console.log("hello world")');
}
create_function('example');
example(); // --> 'hello world'
此外,函數應該是一個函數對象,所以我可以修改對象的原型。
如何用動態名稱創建函數?例如:Javascript:動態函數名稱
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")')
[添加小提琴](http://jsfiddle.net/mE2n5/)在你的答案。 –
我不知道爲什麼錯誤的答案是高位。作者在運行時需要一個命名的函數,而不是要訪問的全局名稱。 –
下面的帖子是比較好的方法還是這個呢? –
我一直在玩這個圍繞在過去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
@Philipp:例如,OP可能有興趣將另一個構造函數替換爲另一個構造函數,但給它的原始構造函數名稱相同,因此代碼看到相同的函數名稱。這可能是我面臨的原因之一。但我確定還有其他人。 –