typeof调用函数,名称作为字符串传递

时间:2012-08-26 15:00:49

标签: javascript typeof

我正在尝试为页面上的所有字段创建一个通用点击事件功能,主要检查目标是空白还是包含用户输入的值。但是,我希望这个泛型函数检查是否存在更具体的函数,如果找到,则允许它处理目标值的验证。 例如:

function genValueCheck(event) {
   var af = event.target.id+'_checkValue';
   if (typeof af == 'function') runFunction(af,[event]); // logic specific to this field
   else { 
      // logic for checking for blanks, etc which applies to all fields
   }
}

但是,typeof在上面的示例中返回'string',因为它应该检查'af'的类型,而不是'af'包含的内容,即函数的名称。

我试图做的是什么?

提前致谢。

2 个答案:

答案 0 :(得分:2)

那是因为af 一个字符串。如果您的函数存在于全局范围中,请使用window[af]。这应该适合你:

function genValueCheck(event) {
   var af = event.target.id+'_checkValue';
   if (typeof window[af] == 'function') runFunction(af,[event]); // logic specific to this field
   else { 
      // logic for checking for blanks, etc which applies to all fields
   }
}

Demo

答案 1 :(得分:2)

创建一个包含所有函数的对象,这样就不会污染全局命名空间,然后使用括号表示法来检索它:

var validators = {};
validators.checker1 = function() { ... };

function genValueCheck(event) {
    var af = event.target.id+'_checkValue';
    if (typeof validators[af] == 'function') {
        validators[af](event); // logic specific to this field
    } else { 
    // logic for checking for blanks, etc which applies to all fields
    }
}