我是node的新手,只是尝试使用process.argv在正确的对象上调用方法,但是我一直收到错误,它无法读取undefined的属性。
// returns with undefined error
var stops_input = process.argv[3];
this[process.argv[3]].displayStops();
// hard-coding object name works with the method:
N.displayStops();
// displayStops method
this.displayStops = function(){
string = "";
stops.forEach(function(i){
if (i === stops[stops.length -1]) {
string += i;
} else {
string += i + ", ";
}
});
console.log(this.name + " train stops: " + string);
}
谢谢你看看。关于如何使用节点终端控制台中的变量调用对象的任何想法?
答案 0 :(得分:0)
尝试使用global
代替this
...
global[process.argv[3]].displayStops();
这假设N
是传递给节点脚本的第二个参数,并且它存在于全局范围内,并且附加了方法displayStops
。
答案 1 :(得分:0)
我会做以下事情。
public double addAmount (double initialValue, double amount, char opType) {
if (amount <= 0)
throw new IllegalArgumentException("Amount must be > 0.");
if (opType == 'T' || opType == 'D' || opType == 'E')
throw new IllegalArgumentException("Invalid opType operation.");
return initialValue + amount; // Now you are returning a double + double = double
}
要查看您的上下文中的内容:
// Your argument from the commandline (faked for your pleasure)
var method = 'xxx'
// 1. Create a function as normal
function xxx() {
return 'xxx'
}
// 1. Create a reference to it
var callable = {xxx: xxx}
// 1. Call it
callable[method]()
如果您想坚持使用console.log(this); // {}
console.log(global.xxx); // undefined
console.log(Object.keys(global)); // Run to see the list
,请更改此信息:
this
对此:
this[process.argv[3]]().displayStops()
前者等同于:
this[process.argv[3]]()
但你想要的是后者,这相当于:
this['displayStops']().displayStops()
答案 2 :(得分:0)
我是node的新手,只是尝试使用process.argv来调用 在正确的对象上的方法,但我不断收到它无法读取的错误 未定义的属性。
process.argv将返回一个参数数组
所以你打电话
node program.js 1 2 3
在终端
var params = process.argv;
console.log(params);
你会得到
[node, path/to/program.js, someMethod, 2, 3]
假设您传递的第一个参数是一个对象
var firstParam = process.argv[2];
现在,如果你有一个用方法定义的对象......
var obj = {
someMethod : function() {
console.log("Hello");
}
}
您可以像这样调用此方法
obj["someMethod"]();
obj[firstParam]();
obj.someMethod();
他们都应该生产&#34;你好&#34;