Windows Jscript-函数名中的变量,是否可能?

Windows Jscript-函数名中的变量,是否可能?,windows,function,variables,jscript,wsh,Windows,Function,Variables,Jscript,Wsh,我在WSHJScript的数组中有一个函数名,我需要在循环中调用它们。 所有我发现的都在这里,但这不起作用,可能是因为我使用WSH和/或从控制台而不是浏览器运行脚本 var func = [ 'cpu' ]; func['cpu'] = function(req){ WScript.Echo("req="+req); return "cpu"; } for (var item in func) { WScript.Echo("item="+ func[item

我在WSHJScript的数组中有一个函数名,我需要在循环中调用它们。 所有我发现的都在这里,但这不起作用,可能是因为我使用WSH和/或从控制台而不是浏览器运行脚本

var func = [
    'cpu'
];

func['cpu'] = function(req){
    WScript.Echo("req="+req);
    return "cpu";
}

for (var item in func) {
    WScript.Echo("item="+ func[item](1));
}
结果是:

C:\test>cscript b.js
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

C:\test\b.js(11, 2) Microsoft JScript runtime error: Function expected
(这是WScript.Echo行)


那么,在这种环境中,有没有办法使用变量中的name调用函数?

没有,问题不在于WSH not命令行

这是代码中的内容:

var func = [
    'cpu'
];
也就是说,数组中有一个元素。元素的内容为“cpu”,其索引为0。数组长度为1

func['cpu'] = function(req){
    WScript.Echo("req="+req);
    return "cpu";
}
这将向数组对象添加一个传统属性,而不是向数组内容添加一个元素。如果进行测试,数组长度仍然为1

for (var item in func) {
    WScript.Echo("item="+ func[item](1));
}
这将迭代数组的内容
item
检索数组中每个元素的索引,然后用于检索内容。但是数组的内容只有一个元素,索引为0,内容为字符串(
cpu
)。它不是一个函数,所以不能调用它

问题是您正在混合使用对象的方式和使用数组的方式

对于阵列版本

var func = [
    function cpu(req){
        return 'called cpu('+req+')';
    },
    function other(req){
        return 'called other('+req+')';
    }
];

func.push(
    function more(req){
        return 'called more('+req+')';
    }
);

for (var item in func) {
    WScript.Echo('calling func['+item+']='+ func[item](1));
};
对于对象版本

var func = {
    cpu : function(req){
        return 'called cpu('+req+')';
    },
    other : function(req){
        return 'called other('+req+')';
    }
};

func['more'] = function(req){
    return 'called more('+req+')';
};

for (var item in func) {
    WScript.Echo('calling func['+item+']='+ func[item](1));
};
正如您所看到的,非常类似,但是如果使用数组,那么应该向数组中添加元素,而不是属性,因为
for in
将迭代数组中的元素。在使用对象方法的情况下,向对象添加属性,In中的
for将迭代对象的属性

非常相似,但不一样