我想用javascript动态创建一个函数。我从以下开始:
function setFunc(setName){
var setName = function () {
};
}
setFunc("totop");
我想动态设置一个函数,但它不起作用!
我该如何解决这个问题?
答案 0 :(得分:6)
那不行。
但是,请考虑一下:JavaScript中的函数只是值而窗口是顶级作用域,所以...(这假定它是新的要在顶级范围内创建的函数。)
function setFunc (name) {
window[name] = function () { alert("hi!") }
}
setFunc("a")
window.a() // "hi!" - explicit property access on object
window["a"]() // "hi!" - ditto
a() // "hi!" - window implicit as top-level
然而,我不推荐这种全球副作用......
快乐的编码。
答案 1 :(得分:4)
问题是,您要在哪个上下文中创建该功能。如果您真的想要创建具有该名称的全局函数,请执行
function setFunc( setName ) {
this[ setName ] = function() {
alert('I am ' + setName);
};
}
setFunc('totop');
然而,破坏这样的全局对象并不是一个好主意。此外,上述代码将在es5严格模式下中断。但是,通过使用new
关键字,您可以创建类似
new setFunc('foobar').foobar();
或只将结果存储在变量
中var myObj = new setFunc('BoyohboyWhatALongString');
console.log( myObj ); // BoyohboyWhatALongString() is in there now
答案 2 :(得分:1)
不要使用这样的eval函数:
function setFunc(setName){
eval (setName + " = function () { };");
}
setFunc("toTop");
您可以将窗口范围作为关联数组进行访问,并使用该名称定义函数:
function setFunc (name) {
window[name] = function () { }
}