如何在javascript中动态构建函数

时间:2011-11-29 10:28:52

标签: javascript function dynamic

我想用javascript动态创建一个函数。我从以下开始:

function setFunc(setName){

    var  setName =  function () {
                    };

}
setFunc("totop");

我想动态设置一个函数,但它不起作用!

我该如何解决这个问题?

3 个答案:

答案 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 () { }
}