根据传递的参数调用js函数

时间:2013-09-23 01:20:58

标签: javascript arguments

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

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

            check+n();      
        }
        else 
    }

因此,例如,如果参数'Balloons'作为 n 传递,那么它将调用函数checkBalloons()。 "check+n();"目前尚未在此处工作。抱歉我缺少简单的js语法!

4 个答案:

答案 0 :(得分:3)

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

window["check"+n]();

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

global["check"+n](); 

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

 obj["check"+n]();

也可以使用[]约定访问对象上定义的函数和属性。即obj["propFuncName"]将为您提供参考,因此在方法的情况下,您可以添加()来调用它。

答案 1 :(得分:2)

如果该功能是全局的,您可以这样做:

window["check" + n]();

或者,你可以把你的函数放在一个像这样的对象中:

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

// call it like this:
myNamespace["check" + n]();

答案 2 :(得分: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');

答案 3 :(得分:0)

如果你这样做:

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

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

将起作用