节点.js - 使用变量作为对象名称来调用方法

Node.js - Use variable as object name to call method

本文关键字:对象 方法 调用 js 变量 节点      更新时间:2023-09-26

我是节点的新手,只是尝试使用 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);
}

感谢您的观看。关于如何使用节点终端控制台中的变量调用对象的任何想法?

尝试使用global而不是this...

global[process.argv[3]].displayStops();

这假定N是传递给节点脚本的第二个参数,并且它存在于全局范围内,并且附加了一个方法displayStops

我会执行以下操作。

// 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()

我是节点的新手,只是尝试使用 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();

他们都应该产生"你好"