我刚接触node,只是尝试使用process.argv在正确的对象上调用一个方法,但我一直收到一个错误,它无法读取未定义的属性。
// 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);
}谢谢你看一看。关于如何从节点终端控制台使用变量调用对象,您有什么想法吗?
发布于 2016-02-25 09:43:06
尝试使用global而不是this...
global[process.argv[3]].displayStops();这里假设N是传递给节点脚本的第二个参数,它存在于全局作用域中,并且附加了一个displayStops方法。
发布于 2016-02-25 09:55:01
我会做以下事情。
// 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()但是你想要后者,这等同于:
this['displayStops']() // The same as calling this.displayStops()发布于 2016-02-25 10:56:45
我刚接触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();他们都应该说出"hello“
https://stackoverflow.com/questions/35616648
复制相似问题