Windows Jscript-函数名中的变量,是否可能?
我在WSHJScript的数组中有一个函数名,我需要在循环中调用它们。 所有我发现的都在这里,但这不起作用,可能是因为我使用WSH和/或从控制台而不是浏览器运行脚本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
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将迭代对象的属性
非常相似,但不一样