0

我试图在另一个函数中调用一个 js 函数,但使用参数来指定函数。即根据传递的参数,它将调用不同的函数

   function toggle(n){
        if (sessionStorage['toggle'+n]== 0){

            check+n();      
        }
        else 
    }

因此,例如,如果参数 'Balloons' 作为n传递,那么它将调用函数 checkBalloons()。"check+n();"目前没有在这里工作。对不起,我缺乏简单的 js 语法!

4

4 回答 4

3

如果函数是在全局范围(浏览器)中定义的,您可以执行以下操作:

window["check"+n]();

或者像 Node.js 这样的租户,您可以从全局对象访问它。

global["check"+n](); 

如果它是其他对象的一部分,那么你也会这样做。

 obj["check"+n]();

对象上定义的函数和属性也可以使用[]约定来访问。ieobj["propFuncName"]会给你参考它,所以在你添加()调用它的方法的情况下。

于 2013-09-23T01:23:17.693 回答
2

如果函数是全局的,你可以这样做:

window["check" + n]();

或者,您可以将函数放在这样的对象中:

myNamespace = {};
myNamespace.checkSomething = function(){ /* ... */ }

// call it like this:
myNamespace["check" + n]();
于 2013-09-23T01:23:29.400 回答
1

到目前为止的答案是正确的,但缺乏解释。

在 JavaScript 中,当名称是字符串时,您不能按名称调用函数。您可以做的是按名称从对象中检索一个值,如果该值恰好是一个函数,您就可以调用它。例如:

var myObject = {};
myObject.myFunction = function() { alert('test!'); };

// Get the property on `myObject` called `myFunction`
var theFunctionLookup = myObject['myFunction'];
// Since that property was a function, you can call it!
theFunctionLookup();

在浏览器中,在全局范围内定义的函数被附加到window对象上。例如,这有效:

function myFunction() { alert('test'); }
var theFunctionLookup = window['myFunction'];
theFunctionLookup();

您可以将最后两行缩短为一行:

function myFunction() { alert('test'); }
// Look up and call the function in one line.
window['myFunction']();

出于同样的原因,您可以使用动态计算的字符串来查找函数。

function checkBalloon() {
  alert('checking balloon');
}

function toggle(n){
  if (sessionStorage['toggle'+n]== 0){
    window['check' + n]();
    check+n();      
  }
}

toggle('Balloon');
于 2013-09-23T01:31:34.730 回答
0

如果你这样做:

    if (sessionStorage['toggle'+n]== 0){

        window["check" + n]();
    }

将工作

于 2013-09-23T01:22:23.500 回答