0

我正在调用这样的 JavaScript 函数:

window[className + 'Click']();

className var 包含一些其他字符串,最后,它调用 myClick() 或 whatEverClick() 之类的函数。没关系,但是有没有办法让第一部分不区分大小写?

示例:
classname = 不管 --> 调用 whatEverClick()
classname = whatEver --> 调用 whatEverClick()

那可能吗?谢谢!

4

2 回答 2

4

你可能不应该,但你可以(不包括某些语言的特殊性):

第 1 步:构建所有窗口属性的小写映射:

var map = {};
for (var key in window) map[key.toLowerCase()] = window[key];

第 2 步:调用您的函数:

map[className.toLowerCase()+'click'](); 

如果您想以 window 作为上下文 ( this) 调用它,请使用

map[className.toLowerCase()+'click'].call(window); 

示范

于 2013-04-04T13:18:46.693 回答
2

如果您绝对有必要在全局对象的上下文中执行,请使用此解决方案,否则我更喜欢解决方案 2(受dystroy 的回答启发)

解决方案 1

if(window[className+"Click"]){
    window[className+'Click']();
}else{
    for(var f in window){
        if(window.hasOwnProperty(f) && typeof window[f]=='function'){
            if(f.toLowerCase() === className.toLowerCase()+'click'){
                window[f]();
            }
        }
    }
}

解决方案 2

//Create an Object and store all the references
var functions_hash = {}

for(var f in window){
    if(window.hasOwnProperty(f) && typeof window[f]=='function'){
        functions_hash[f.toLowerCase] = window[f]
    }
}

//execute using the hash later on
functions_hash[className.toLowerCase()+'click']
于 2013-04-04T13:23:41.153 回答